Entwickler-Ecke

Sonstiges (Delphi) - Problem mit StringList


tommie-lie - Di 24.09.02 17:11
Titel: Problem mit StringList
Hallo,

Ich habe folgendes Problem:
Ich habe zwei Stringlists erstellt (während der Laufzeit). Ich habe gleichzeitig in einer Datenbank (MyLittleBase2) in den Felder "RelImages" und "RelTexts" zwei Strings, die durch Kommata getrennte Zahlen enthalten (1,2,3,4). Diese möchte ich über's CommaText-Property den StringLists zuweisen. Später werden dann die Lists ausgelesen und aus anderen Datenbanken die entsprechenden Zeilen angesprungen (natürlich mit StrToInt).
Der Code zum Zuweisen sieht so aus:

Quelltext
1:
2:
Images2Add.CommaText := TextDatenbank.GetData('RelImages');
Texts2Add.CommaText := TextDatenbank.GetData('RelTexts');


Wenn ich das Programm dann ausüfhre, enthalten die Listen keine Strings. Durch Debugging habe ich rausgefunden, daß der Fehler in diesen Zeilen liegt, also direkt da, wo ich den Text zuweise. Dannach enthält nämlich die Stringliste 0 Einträge.

Die Datenbankdatei sieht so aus (cvs-Format):

Quelltext
1:
2:
3:
4:
5:
6:
Text; RelImages; RelTexts
F:\\meintext.txt; 1,2,4;
F:\\nocheiner.txt; 6,5,2;
F:\\schonwieder.txt; 3,6,4,5;
F:\\dervierte.txt; 2,1,5;
F:\\nr5lebt.txt; 3;


Also sind überall mindestens 3 Einträge (außer beim letzten).
Weiß einer warum die Stringlist die Strings aus den Felder nicht annehmen will? Fehlermeldungen bezüglich den StringLists erhalte ich beim Kompilieren keine. Nur ein Hint, daß eine Variable deklariert aber nicht benutzt wird.

Ansonsten geht übrigens alles. Er liest also das erste Feld der Datenbank ohne weiteres aus. Zwar nicht in eine Liste sondern in einen "normalen" String, aber die Datenbank funktioniert an sich.

Tschüß
Thomas


CenBells - Mi 25.09.02 09:21

kannst du nochmal ein bisserl mehr code posten, wo die zuweisung in die stringlisten ausführst.

Gruß
Ken


tommie-lie - Mi 25.09.02 15:32

Hallo Ireniceus,

Der Code den ich gepostet habe ist eigentlich die Zuweisung in die Stringlisten. Aber hier ist nochmal eine gekürzte Version der ganzen Unit:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
unit dbinterface;

interface

uses
  Classes, StrUtils, SysUtils, ComCtrls;

procedure UpdateTextTree;
procedure ClearTree;


implementation

uses
  MainUnit;

procedure UpdateTextTree;
var
  i, j, ref_i: Integer;
  ItemText: String;
  CurrentNode: TTreeNode;
  Images2Add, Texts2Add: TStringList;

begin
  // At first, resets the tree to an empty list to prevent double
  // entries or lost links in the tree
  ClearTree;

  // Creating the stringlists at the beginning
  Images2Add := TStringList.Create;
  Texts2Add := TStringList.Create;

  // then interact only with the form that owns the tree
  with MainForm do begin

    //Adds the major node(s) containing the filename of the text
    TextDatenbank.GoFirst;
    i := TextDatenbank.GetCurrentRow;
    while (i <= TextDatenbank.RowCount) do
    begin
      TextDatenbank.Go(i);
      ItemText := ExtractFileName(TextDatenbank.GetData('Text'));
      ItemText := LeftStr(ItemText, Pos('.', ItemText) - 1);
      CurrentNode := TextTree.Items.AddNode(nil, nil, ItemText, nil, naAdd);

      // Setting the image to the text-icon, 'cause they are all texts
      CurrentNode.ImageIndex := 2;
      CurrentNode.SelectedIndex := 2;

      // Then adding the subnodes containing all the references for
      // the specific text
      // At first, setting the references to the stringlists...
      Images2Add.CommaText := TextDatenbank.GetData('RelImages');
      Texts2Add.CommaText := TextDatenbank.GetData('RelTexts');
    [b]in den letzten beiden Zeilen hakt's[/b]

      // ...then adding the images from the stringlist
      ref_i := Images2Add.Count - 1;

      while ref_i >= 0 do
      begin
        ImageDatenbank.Go(StrToInt(Images2Add.Strings[ref_i]));
        TextTree.Items.AddChild(CurrentNode, ImageDatenbank.GetData('Image'));
        TextTree.Items.AddChild(CurrentNode, 'mist');
        CurrentNode.Item[j - 1].ImageIndex := 3;
        CurrentNode.Item[j - 1].SelectedIndex := 3;
        CurrentNode.Collapse(True);

        ref_i := ref_i - 1;
      end;

        i := i + 1;
      end;
  end;
end;


Wie gesagt, ist gekürzt. Die Unit esteht nicht nur aus der einen Prozedur. Mag sein, daß zusätzliche syntaktische Fehler drin sind, die will ich aber nicht behoben wissen. Ich will, daß meine beiden Stringlisten funktionieren, den Rest krieg' ich dann schon selber hin.