AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Array mit Variablen?

Ein Thema von Borschti · begonnen am 23. Nov 2009 · letzter Beitrag vom 23. Nov 2009
Antwort Antwort
Borschti

Registriert seit: 1. Nov 2007
Ort: Marburg Lahn
235 Beiträge
 
Delphi 2007 Professional
 
#1

Array mit Variablen?

  Alt 23. Nov 2009, 10:29
Hallo,

ich habe ein kleines Problem welches sicherlich schon einige hier hatten
Also in meinem Programm geht es darum, Kundendaten die in eine Exceltabelle geschrieben wurden, einzulesen und in Outlook als Kontakte zu speichern, dies funktioniert eigentlich auch schon Wunderbar. Der Knackpunkt ist jetzt aber das die Kundenkontakte in der Exceltabelle mehrere Ansprechpartner in den jeweiligen Firmen haben können aber nicht klar definiert ist wieviele es maximal sein können. Z.Z. ist es so das ich mit maximal 5 Ansprechpartnern pro Kundenkontakt rechne und es auch so programmiert habe das fünf Ansprechpartner für einen Kontakt in Outlook gespeichert werden. Aber wie das so ist gibt es irgendwann einen Kunden der sechs Ansprechpartner hat, deswegen möchte ich das gerne dynamisch machen aber ich weiß nicht genau wie.

Hier ist erstmal meine procedure wie ich sie z.Z. habe, sprich mit dem festen Wert von fünf Ansprechpartnern pro Kundenkontakt:
Delphi-Quellcode:
procedure TKontakt.FillProbs(WorkSheet: _WorkSheet; activeRow : Integer;
                             APCount, FillCount, lastActiveRow : Integer;
                             isHeader : Boolean);
var
  isZero : Boolean;
  isEmptyStr : String;
begin

  if isHeader and (FillCount <= 1) then
    begin
      inc(activeRow);
      activeRow := activeRow + APCount;
    end else
      begin
        activeRow := lastActiveRow + APCount;
      end;

  FLastActiveRow := activeRow;

  KndNr := Worksheet.Cells.Item[activeRow, 1].Value;
  CompanyName := Worksheet.Cells.Item[activeRow, 2].Value;
  FullName := Worksheet.Cells.Item[activeRow, 3].Value;
  BusinessAdressStreet := Worksheet.Cells.Item[activeRow, 4].Value;
  BusinessAddressPostalCode := Worksheet.Cells.Item[activeRow, 5].Value;
  BusinessAddressCity := Worksheet.Cells.Item[activeRow, 6].Value;
  BusinessTelephoneNumber := Worksheet.Cells.Item[activeRow, 7].Value;
  BusinessFaxNumber := Worksheet.Cells.Item[activeRow, 8].Value;
  EmailAddress := Worksheet.Cells.Item[activeRow, 9].Value;
  BusinessHomePage := Worksheet.Cells.Item[activeRow, 10].Value;
  FileAs := Worksheet.Cells.Item[activeRow, 11].Value;
  bsLfdNr0 := Worksheet.Cells.Item[activeRow, 12].Value;
  bsAP0 := Worksheet.Cells.Item[activeRow, 13].Value;
  bsFunktion0 := Worksheet.Cells.Item[activeRow, 14].Value;
  bsTelNr0 := Worksheet.Cells.Item[activeRow, 15].Value;
  bsFaxNr0 := Worksheet.Cells.Item[activeRow, 16].Value;
  bsEMail0 := Worksheet.Cells.Item[activeRow, 17].Value;

  bsAPCount := 1;
  isZero := false;

  isEmptyStr := Worksheet.Cells.Item[activeRow + 1, 12].Value;

  if (Worksheet.Cells.Item[activeRow + 1, 12].Value <> '0') and (isZero = false) then
    begin
      if isEmptyStr <> 'then
        begin
          bsLfdNr1 := Worksheet.Cells.Item[activeRow + 1, 12].Value;
          bsAP1 := Worksheet.Cells.Item[activeRow + 1, 13].Value;
          bsFunktion1 := Worksheet.Cells.Item[activeRow + 1, 14].Value;
          bsTelNr1 := Worksheet.Cells.Item[activeRow + 1, 15].Value;
          bsFaxNr1 := Worksheet.Cells.Item[activeRow + 1, 16].Value;
          bsEMail1 := Worksheet.Cells.Item[activeRow + 1, 17].Value;

          bsAPCount := 2;
          isZero := true;
        end;
    end;

  isEmptyStr := Worksheet.Cells.Item[activeRow + 2, 12].Value;
  if (Worksheet.Cells.Item[activeRow + 2, 12].Value <> '0') and (isZero = true) then
    begin
      if isEmptyStr <> 'then
        begin
          bsLfdNr2 := Worksheet.Cells.Item[activeRow + 2, 12].Value;
          bsAP2 := Worksheet.Cells.Item[activeRow + 2, 13].Value;
          bsFunktion2 := Worksheet.Cells.Item[activeRow + 2, 14].Value;
          bsTelNr2 := Worksheet.Cells.Item[activeRow + 2, 15].Value;
          bsFaxNr2 := Worksheet.Cells.Item[activeRow + 2, 16].Value;
          bsEMail2 := Worksheet.Cells.Item[activeRow + 2, 17].Value;

          bsAPCount := 3;
          isZero := true;
        end else
          begin
            isZero := false;
          end;
    end else
      begin
        isZero := false;
      end;

  isEmptyStr := Worksheet.Cells.Item[activeRow + 3, 12].Value;
  if (Worksheet.Cells.Item[activeRow + 3, 12].Value <> '0') and (isZero = true) then
    begin
      if isEmptyStr <> 'then
        begin
          bsLfdNr3 := Worksheet.Cells.Item[activeRow + 3, 12].Value;
          bsAP3 := Worksheet.Cells.Item[activeRow + 3, 13].Value;
          bsFunktion3 := Worksheet.Cells.Item[activeRow + 3, 14].Value;
          bsTelNr3 := Worksheet.Cells.Item[activeRow + 3, 15].Value;
          bsFaxNr3 := Worksheet.Cells.Item[activeRow + 3, 16].Value;
          bsEMail3 := Worksheet.Cells.Item[activeRow + 3, 17].Value;

          bsAPCount := 4;
          isZero := true;
        end else
          begin
            isZero := false;
          end;
    end else
      begin
        isZero := false;
      end;

  isEmptyStr := Worksheet.Cells.Item[activeRow + 4, 12].Value;
  if (Worksheet.Cells.Item[activeRow + 4, 12].Value <> '0') and (isZero = true) then
    begin
      if isEmptyStr <> 'then
        begin
          bsLfdNr4 := Worksheet.Cells.Item[activeRow + 4, 12].Value;
          bsAP4 := Worksheet.Cells.Item[activeRow + 4, 13].Value;
          bsFunktion4 := Worksheet.Cells.Item[activeRow + 4, 14].Value;
          bsTelNr4 := Worksheet.Cells.Item[activeRow + 4, 15].Value;
          bsFaxNr4 := Worksheet.Cells.Item[activeRow + 4, 16].Value;
          bsEMail4 := Worksheet.Cells.Item[activeRow + 4, 17].Value;

          bsAPCount := 5;
        end;
    end;
  
end;
Ich habe schon probiert die ganzen Blöcke in eine Schleife zu packen, in etwa so(einfach mal so runter geschrieben, sind bestimmt ein paar Fehler drin):
Delphi-Quellcode:
procedure TKontakt.FillProbs(WorkSheet: _WorkSheet; activeRow : Integer;
                             APCount, FillCount, lastActiveRow : Integer;
                             isHeader : Boolean);
var
  isZero : Boolean;
  isEmptyStr : String;
begin

  if isHeader and (FillCount <= 1) then
    begin
      inc(activeRow);
      activeRow := activeRow + APCount;
    end else
      begin
        activeRow := lastActiveRow + APCount;
      end;

  FLastActiveRow := activeRow;

  KndNr := Worksheet.Cells.Item[activeRow, 1].Value;
  CompanyName := Worksheet.Cells.Item[activeRow, 2].Value;
  FullName := Worksheet.Cells.Item[activeRow, 3].Value;
  BusinessAdressStreet := Worksheet.Cells.Item[activeRow, 4].Value;
  BusinessAddressPostalCode := Worksheet.Cells.Item[activeRow, 5].Value;
  BusinessAddressCity := Worksheet.Cells.Item[activeRow, 6].Value;
  BusinessTelephoneNumber := Worksheet.Cells.Item[activeRow, 7].Value;
  BusinessFaxNumber := Worksheet.Cells.Item[activeRow, 8].Value;
  EmailAddress := Worksheet.Cells.Item[activeRow, 9].Value;
  BusinessHomePage := Worksheet.Cells.Item[activeRow, 10].Value;
  FileAs := Worksheet.Cells.Item[activeRow, 11].Value;
  bsLfdNr0 := Worksheet.Cells.Item[activeRow, 12].Value;
  bsAP0 := Worksheet.Cells.Item[activeRow, 13].Value;
  bsFunktion0 := Worksheet.Cells.Item[activeRow, 14].Value;
  bsTelNr0 := Worksheet.Cells.Item[activeRow, 15].Value;
  bsFaxNr0 := Worksheet.Cells.Item[activeRow, 16].Value;
  bsEMail0 := Worksheet.Cells.Item[activeRow, 17].Value;

  bsAPCount := 1;
  isZero := false;

  isEmptyStr := Worksheet.Cells.Item[activeRow + 1, 12].Value;

  for i := 0 to X
    begin
      if (Worksheet.Cells.Item[activeRow + i, 12].Value <> '0') and (isZero = false) then
        begin
          if isEmptyStr <> 'then
            begin
              bsLfdNr1 := Worksheet.Cells.Item[activeRow + i, 12].Value;
              bsAP1 := Worksheet.Cells.Item[activeRow + i, 13].Value;
              bsFunktion1 := Worksheet.Cells.Item[activeRow + i, 14].Value;
              bsTelNr1 := Worksheet.Cells.Item[activeRow + i, 15].Value;
              bsFaxNr1 := Worksheet.Cells.Item[activeRow + i, 16].Value;
              bsEMail1 := Worksheet.Cells.Item[activeRow + i, 17].Value;

              bsAPCount := i + 1;
              isZero := true;
            end;
        end;
    end;
end;
Hier stoße ich jetzt natürlich auf das Problem, dass ich nicht für jeden Schleifendurchlauf die Variablen(also für den zweiten Schleifendurchlauf müsste ich die Variablen bsLfdNr2, bsAP2, bsFunktion2 usw. nehmen) die Variablen nehmen kann ich brauch Ich denke mir das so das ich die Variablen mit Hilfe der Schleifenvariable ansprechen will aber das funktioniert natürlich nicht

Habe dann später irgendwie an ein Array mit Variablen gedacht, geht das? Oder wie löst ihr das Problem? hatte das Problem früher schon oft aber bin immer irgendwie drum herum gekommen nur jetzt weiß ich nicht wie ich das verwirklichen kann?

Danke für alle hilfreichen Antworten, ich steh echt vor einer Mauer

VG
Alex
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Array mit Variablen?

  Alt 23. Nov 2009, 10:41
Guck dir mal dynamische Arrays und Delphi-Referenz durchsuchenSetLength an.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

Re: Array mit Variablen?

  Alt 23. Nov 2009, 16:24
Der erste Schritt wäre das Zusammenfassen der Informationen zu einer Struktur:
Delphi-Quellcode:
TPersonContact = record
  Funktion : string; // z.B. Leiter der EDV
  Tel: string;
  Fax: string;
  EMail : string;
end;
Diesen Record kann man in einem Array of TPersonContact oder einer Liste (Ableitung von TList) speichern.
Wenn du schlau bist, dann bleibst du nicht bei einem Record stehen, sondern machst gleich eine Klasse daraus.
Delphi-Quellcode:
TPersonContact = class(TObject)
public
  procedure ReadFromWorksheet(sheet:Worksheet; row, col:integer);
  property Funktion : string; // z.B. Leiter der EDV
  property Tel: string;
  property Fax: string;
  property EMail : string;
end;
Dann kannst du nämlich auch Methoden hinzufügen.
Die Methode ReadFromWorksheet würde die Daten aus dem übergebenen Worksheet lesen; beginnend ab der Zelle,
die mit row und col angesprochen wird.
Die Objekte der Klasse TPersonContact würde man dann in einer TObjectList speichern.
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz