(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
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
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
Tino: Code- durch Delphi-Tags ersetzt.