Einzelnen Beitrag anzeigen

Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#50

Re: StringGrid mit Daten füllen und farblich Darstellen

  Alt 27. Feb 2009, 17:36
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.
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat