Thema: Delphi Array mit Variablen?

Einzelnen Beitrag anzeigen

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