Autor Beitrag
Roidsear Ó Ghearmáin
Hält's aus hier
Beiträge: 5

Windows 2000 SP4
D6 Prof
BeitragVerfasst: Mi 02.07.03 15:55 
(zumindest denke ich, daß dies die Ursache sein könnte...)

Hallo zusammen!

Ich habe folgendes Problem: Ich habe ein Formular (in f_ankauf.pas) mit 2 Eingabefeldern für eine Artikelsuche. Beim Verlassen des 1. Feldes wird ein SQL über ADO an mySQL abgesetzt. Führt dieser zu keinem Ergebnis, wird eine Suche via Matchcode im 2. Feld angestoßen. Das Ergebnis dieses SQLs (getriggert bei OnExit des TEdit Feldes), der dann auch mehrere Ergebnisse liefern kann, soll dann in einem Popup zur Auswahl angezeigt werden. Dazu habe ich in f_ankauf.pas ein array mit entsprechenden Records angelegt und als public deklariert. Bei 'OnCreate' des Popupfensters (f_matchlist.pas) wird dann das Array, dessen Größe je nach Größe des ResultSets gesetzt wird, ausgelesen und in eine TListBox gestellt.

(Hier ist auch noch ein Workaround im Code, da ich immer den letzten Eintrag doppelt hatte, keine Ahnung, warum...)
Das Popup wird mit
ausblenden Delphi-Quelltext
1:
2:
  Application.CreateForm(TF_MatchList, f_MatchList);
  f_MatchList.Show;

zur Laufzeit kreiert.

Wenn ich jetzt die Applikation starte, bekomme ich die Exception:
Zitat:
EAccessViolation (At address: 00404BEB, Read of Address: 00000022).

Sobald ich die CreateForm - routine kommentiere, läuft das Ding.

Mache ich hier irgendwelche grundlegenden Fehler?

Dank schonmal im Voraus... ;)

Rüdiger

Kurze Info zum System:
W2k SP3
mySQL 3.23.57
MDAC 2.7
D6 Prof.
Ich nutze ADO Objekte via myODBC 3.51

ausblenden volle Höhe Delphi-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:
===============================================
f_ankauf.pas
===============================================
TMatchListElement = Record
                          art_id,
                          titel1,
                          titel2,
                          artist,
                          komposer : string;
                      end;
[...]
public
      MatchList       : array of TMatchListElement;
[...]

===============================================
f_matchlist.pas
===============================================
[...]
procedure Tf_MatchList.FormCreate(Sender: TObject);
var _length : integer;
    _entry,
    _prev   : string;

begin
     MatchedHitList.Clear;
     _prev := '';
     for _length := 0 to length(Form_Ankauf.MatchList) do
     begin
          if (Form_Ankauf.MatchList[_length].art_id <> '')
          and (Form_Ankauf.MatchList[_length].art_id <> _prev)} then
          begin
                _entry := Form_Ankauf.MatchList[_length].art_id + ' | '
                        + Form_Ankauf.MatchList[_length].artist + ' | '
                        + Form_Ankauf.MatchList[_length].titel1;
                MatchedHitList.AddItem(_entry, MatchedHitList);
                _prev := Form_Ankauf.MatchList[_length].art_id;
          end;
     end;
end;


Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.

_________________
Rüdiger
repeat until 1=2; writeln('Ein Wunder!');
TomT
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 116

Suse 9.1 WinXP
D6 Pers
BeitragVerfasst: Mi 02.07.03 23:32 
Ersetze mal :
ausblenden Delphi-Quelltext
1:
for _length := 0 to length(Form_Ankauf.MatchList) do					


durch
ausblenden Delphi-Quelltext
1:
for _length := 0 to (length(Form_Ankauf.MatchList)-1do					


Weil Länge die anzahl angibt, du aber bei 0 anfängst, damit hast du einen zuviel.

_________________
...und da wurde mir klar, dass eine Toolbar keine Kneipe für Heimwerker ist.
Roidsear Ó Ghearmáin Threadstarter
Hält's aus hier
Beiträge: 5

Windows 2000 SP4
D6 Prof
BeitragVerfasst: Do 03.07.03 15:51 
Titel: Danke... ;)
TomT hat folgendes geschrieben:
Weil Länge die anzahl angibt, du aber bei 0 anfängst, damit hast du einen zuviel.


Ja, danke! Das wars...
...dabei ist es doch eine alte Weisheit, daß es in der EDV immer einer weniger ist, als man denkt.... ;)

Slán,
Rüdiger

_________________
Rüdiger
repeat until 1=2; writeln('Ein Wunder!');