Hallo nochmal zusammen,
habe das ganze jetzt ausgiebig geprüft, und habe leider festgestellt, das da noch irgendein zeitliches Problem bestehen muss.
Starte ich meine Verbindung um Daten von der
COM Schnittstelle zu holen, geht das, möchte ich diese allerdings wieder trennen, kommen zwar keine weiteren Daten ins VST, aber mein Programm scheint an irgendeiner Stelle hängen zu bleiben. Oder was ich eher Vermute, weil wenn ich lange Daten hole, und mein Programm minimiere, und später wieder vergrößern will, dauert das unwahrscheinlich lange bis das VST neu gezeichnet ist oder es hgeht gar nicht.
Daher vermute ich, das ich mir irgendwo den Speicher zu mülle.
Mein Object gebe ich allerdings wieder frei.
Hier mal der Code..
Delphi-Quellcode:
{Datensatzverarbeitung}
procedure TForm1.TreeViewResult(ParserTreeView: TMyBaseParser);
var
i: Integer;
Temp1 : Integer;
Temp2 : String;
Temp3 : String;
Temp4 : String;
Temp5 : String;
Temp6 : String;
Daten : TOMB256PLUS;
begin
Temp1 := ParserTreeView.Entries[0].LfdNr;
Temp2 := ParserTreeView.Entries[0].Datum;
Temp3 := ParserTreeView.Entries[0].Uhrzeit;
Temp4 := ParserTreeView.Entries[0].Ereignis;
Temp5 := ParserTreeView.Entries[0].Teilnehmer;
Temp6 := ParserTreeView.Entries[0].Bereich;
QryMB256PLUS.Close;
QryMB256PLUS.SQL.Text := 'INSERT INTO MB256PLUS'+
'("LfdNr", "Datum", "Uhrzeit", "Ereignis", "Teilnehmer", "Bereich")'+
'VALUES(:LfdNr,:Datum,:Uhrzeit,:Ereignis,:Teilnehmer,:Bereich)';
QryMB256PLUS.ParamByName('LfdNr').AsInteger := Temp1;
QryMB256PLUS.ParamByName('Datum').AsString := Temp2;
QryMB256PLUS.ParamByName('Uhrzeit').AsString := Temp3;
QryMB256PLUS.ParamByName('Ereignis').AsString := Temp4;
QryMB256PLUS.ParamByName('Teilnehmer').AsString := Temp5;
QryMB256PLUS.ParamByName('Bereich').AsString := Temp6;
QryMB256PLUS.ExecSQL;
ConMB256PLUS.Commit;
QRyMB256PLUS.Close;
QryMB256PLUS.SQL.Text := 'SELECT * FROM MB256PLUS';//'SELECT * FROM MB256PLUS';
QryMB256PLUS.Open;
VST.BeginUpdate;
Daten := TOMB256PLUS.Create;
QryMB256PLUS.Last;
with Daten do
begin
Daten.ID := QryMB256PLUS.FieldByName('ID').AsInteger;
Daten.LfdNr := QryMB256PLUS.FieldByName('LfdNr').AsInteger;
Daten.Datum := QryMB256PLUS.FieldByName('Datum').AsString;
Daten.Uhrzeit := QryMB256PLUS.FieldByName('Uhrzeit').AsString;
Daten.Ereignis := QryMB256PLUS.FieldByName('Ereignis').AsString;
Daten.Teilnehmer := QryMB256PLUS.FieldByName('Teilnehmer').AsString;
Daten.Bereich := QryMB256PLUS.FieldByName('Bereich').AsString;
end;
VST.AddChild(nil, Daten);
if Pos('Einbruch',Daten.Ereignis)
or Pos('EINBRUCH',Daten.Ereignis) > 0 then
begin
CBAlarme.Items.Add(Daten.Ereignis);
CBAlarme.ItemIndex := 0;
CBAlarmeDatum.Items.Add(Daten.Datum);
CBAlarmeDatum.ItemIndex := 0;
end;
if Pos('Störung',Daten.Ereignis)
or Pos('STÖRUNG',Daten.Ereignis) > 0 then
begin
CBStoerungen.Items.Add(Daten.Ereignis);
CBStoerungen.ItemIndex := 0;
CBStoerungenDatum.Items.Add(Daten.Datum);
CBStoerungenDatum.ItemIndex := 0;
end;
if Pos('Extern',Daten.Ereignis) > 0 then
begin
CBExtern.Items.Add(Daten.Ereignis);
CBExtern.ItemIndex := 0;
CBExternDatum.Items.Add(Daten.Datum);
CBExternDatum.ItemIndex := 0; end;
if Pos('Intern',Daten.Ereignis) > 0 then
begin
CBIntern.Items.Add(Daten.Ereignis);
CBIntern.ItemIndex := 0;
CBInternDatum.Items.Add(Daten.Datum);
CBInternDatum.ItemIndex := 0;
end;
VST.ScrollIntoView(VST.GetLast, true);
VST.EndUpdate;
QRyMB256PLUS.Close;
DataMB256plus := '';
end;
procedure TForm1.VSTFreeNode(Sender: TBaseVirtualTree;
Node: PVirtualNode);
var
Daten : TOMB256PLUS;
begin
Daten := TOMB256PLUS(VST.GetNodeData(Node)^);
Daten.Free;
end;
Leider kann ich mit Haltepunkten nichts anfangen. Da ich bei den vielen bereits gesetzten nichts falsches Enddecken kann.
Hat vieleicht jemand eine Idee.
Gruß und Danke Jens