Nein, eben nicht.
Ich versuche die Datenbank zu füllen, und da mach er den selben Fehler, wie beim StringGrid füllen.
Schaue ich mir die Datenbank später an, ist der alte Fehler da.
Ich bin allerdings von meinen Gedanken schon etwas weiter.
Ich versuch mal es zu beschreiben.
Ich lese mit folgender Anweisung die Daten, die sich momentan im Puffer der Einbruchmeldeanlage befinden.
Delphi-Quellcode:
{Daten von COM-Schnittestelle lesen}
procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var
Daten :
String;
begin
ComPort1.ReadStr(Daten, Count);
Buffer:=Buffer+Daten;
Bufferverarbeitung;
//Procedure, in der die Daten verarbeitet werden
end;
Das Problem hierbei, ist das im Puffer der Einbruchmeldeanlage manchmal auch mehrere Datensätze vorhanden sind, was aber wiederum eigendlich durch die Verarbeitungsprocedure ausgeglichen werden sollte.
Delphi-Quellcode:
Procedure TForm1.Bufferverarbeitung;
Var
I :Integer;
Laenge :Integer;
ID :String;
SatzEnd :String;
begin
Laenge:=Length(Buffer);
I:=1;
while I < Laenge+1 do
begin
Zeile:=Zeile+Buffer[I];
DataMB256plus:=DataMB256plus+Buffer[I];
if Buffer[I] = #13 then
if Buffer[I+1] = #10 then
if Buffer[I+2] = #13 then
if Buffer[I+3] = #10 then
begin
DataMB256plus := StringReplace(DataMB256plus, #154, 'Ü', [rfReplaceAll]);
DataMB256plus := trim(StringReplace(DataMB256plus, #$D, '', [rfReplaceAll]));
DataMB256plus:= StringReplace(DataMB256plus, #129, 'ü', [rfReplaceAll]);
DataMB256plus := trim(StringReplace(DataMB256plus, #132, 'ä', [rfReplaceAll]));
DataMB256plus := StringReplace(DataMB256plus, #142, 'Ä', [rfReplaceAll]);
DataMB256plus := StringReplace(DataMB256plus, #148, 'ö', [rfReplaceAll]);
DataMB256plus := StringReplace(DataMB256plus, #153, 'Ö', [rfReplaceAll]);
DataMB256plus := StringReplace(DataMB256plus, #154, 'Ü', [rfReplaceAll]);
DataMB256plus := StringReplace(DataMB256plus, #10#13, ' ', [rfReplaceAll]);
DatenverarbeitungVSTMB256plus; //Sprung in Procedure
DataMB256plus := '';
end;
IF Buffer[I] =#13 then
begin
case RGZentralentyp.ItemIndex of
0 : DatenverarbeitungMB24;
1 : DatenverarbeitungMB48;
2 : DatenverarbeitungMB100;
3 : DatenverarbeitungMB256;
4 : DatenverarbeitungUEZ2000;
5 : DatenverarbeitungBMC1024;
end;
end;
INC(I);
end;
Buffer:='';
end;
Die Frage für mich ist jetzt, wenn meine Bufferverarbeitung noch läuft, aber schon wieder ein neues Ereignis
procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
anliegt, wird der Buffer ja durch den Puffer neu gefüllt, und macht ja somit meinen Datensatz Kaputt.
PS: Übrigens, nenn mich ruhig Jens.