Delphi-PRAXiS
Seite 6 von 11   « Erste     456 78     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi StringGrid mit Daten füllen und farblich Darstellen (https://www.delphipraxis.net/128425-stringgrid-mit-daten-fuellen-und-farblich-darstellen.html)

Jens Hartmann 27. Feb 2009 17:42

Re: StringGrid mit Daten füllen und farblich Darstellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Schade, als ich Dir eben geantwortet habe, hatte ich eine Blitzidee, von der ich dachte Sie lößt das Problem,

Leider nicht...

Delphi-Quellcode:
procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var
  Daten : String;
begin
  if Buffer = '' then
  begin
  ComPort1.ReadStr(Daten, Count);
  Buffer:=Buffer+Daten;
  Bufferverarbeitung;
  end;
end;
Im Anhang mal ein Screenshot, wo du sehen kannst, das der Counter der Datenbank sauber läuft, aber Datensätze (LfdNr) fehlen.

Chemiker 27. Feb 2009 18:42

Re: StringGrid mit Daten füllen und farblich Darstellen
 
Hallo Jens,

bis Du sicher, dass die Daten alle sauber übertragen werden?

Bis bald Chemiker

Jens Hartmann 27. Feb 2009 18:54

Re: StringGrid mit Daten füllen und farblich Darstellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ja, das bin ich,


Ich bin noch ein Stück weiter gekommen, das Problem, liegt im Zerstören der Globalen Var. DataMB256Plus

Delphi-Quellcode:
  DataMB256plus := '';
Setze ich diese Var. in der Procedure Bufferverarbeitung auf Leer, werden Datensätze zerstört,

Setze ich diese Var. erst nach dem Eintrag in die Datenbank auf Leer, habe ich das Problem, das wenn eine Datensatz nicht richtig mit dem Wert 'Ereignis' anfängt, der Var. nie auf Leer gesetzt wird.

Das Problem, liegt darin, das wenn Du dir mal den Datensatz anschaust, sieht man das nie ein saubere Anfang und ein sauberes Ende da ist, weil die Procedure

Delphi-Quellcode:
 
{Daten von COM-Schnittestelle lesen} 
procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
immer genau das ließt, was im Speicher ist.(Puffer der EMA).

Das heißt, das durch das Zerstören, je nach angefallenen Daten die Var. zerstört wird und somit noch nicht Übergeben Daten fehlen.

Ich trage ja nur komplette Datensätze ein, um keinen Müll in der Datenbank zu haben. Von den Daten aus dem folgenden Screenshot werden somit der erste und letzte Datensatz getilt. Liegt aber nicht am Datensatz selber, sondern daran das ich ja die Var. leere, obwohl sie noch nicht geleer werden dürfte..

Ich weiß nur echt gerade nicht, wie ich das in den Griff bekommen soll.

Am besten wäre, ich könnte schon beim einlesen nur jeweils einen Datensatzt aus dem Puffer der EMA holen. Weiß aber nicht wie oder ob es überhaupt geht.

Chemiker 27. Feb 2009 18:59

Re: StringGrid mit Daten füllen und farblich Darstellen
 
Hallo Jens,

ich weis ich stelle blöde Fragen, aber nur um das Problem einzugrenzen.

Holst Du die Daten aus der EMA, oder werden sie von der EMA nachdem der Puffer in der EMA voll ist gesendet?

Bis bald Chemiker

Jens Hartmann 27. Feb 2009 19:08

Re: StringGrid mit Daten füllen und farblich Darstellen
 
Nein, ich hole die Daten, der Puffer ist ja auch immer unterschielich gefüllt. Ich hole die Daten ja über meine Komponente mit dem Ereignis
Delphi-Quellcode:
{Daten von COM-Schnittestelle lesen} 
procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
Ich weiß allerdings, leider nicht genau wann das in Kraft tritt. Aufjedenfall muss es so sein, das die Daten gehlt werden, weil die Datenmenge unterschiedlich ist.

Daher auch die diverenzen bei den Fehlenden Datensätzen. Mal alle 5 mal alle 7 ist ja unterschiedlich. Hole ich aus dem Puffer der EMA 11 Datensätze, wovon der erste und der letzte nicht vollständig sind, werden 9 in die Datenbank eingetragen. Die andern beiden entfallen.

Chemiker 27. Feb 2009 19:21

Re: StringGrid mit Daten füllen und farblich Darstellen
 
Hallo Jens,

es muss gelingen eine Gemeinsamkeit zwischen den Datensätzen zu ermitteln.

1.) Bestehen die Datensätze immer aus der gleichen Anzahl Zeichen?
2.) Gibt es Zeichen (Zeichenreihenfolge) am Anfang des Datensatzes und am Ende?
3.) Gibt es eine gleichbleibende Zeitdifferenz zwischen den Datensätzen?

Welche Komponente benutzt Du überhaupt?

Bis bald Chemiker

Jens Hartmann 27. Feb 2009 19:37

Re: StringGrid mit Daten füllen und farblich Darstellen
 
Ich nutzt die Komponente CPortLib (TComPort4Beta).

Ja ein Datensatz fängt immer mit 'Ereignis:' an und endet immer mit #13#10#13#10

Die einzelnen Zeilen der Datensätze sind nur mit #13#10 getrennt.

Über diese Zeichen, nehme ich den Datensatz ja auch schon auseinander. Das Problem, was ja nur da ist, das die Schnittstelle nicht bei Ereignis anfängt und bei #13#10#13#10 aufhört.

Es wird gelesen was gerade da ist.

Beispiel:

Ich lese

'atum:21.02.2009.................................. ......................
Ereignis.......................................... .......................................#13#10#13#1 0
Ereignis.......................................... .......................................#13#10#13#1 0
Ereignis.......................................... .......................................#13#10#13#1 0
Ereignis................................Extern'


Daten werden verarbeitet

Nächstes lesen

'Scharf........................................... ...
Ereignis.......................................... .......................................#13#10#13#1 0
Ereignis.......................................... .......................................#13#10#13#1 0
Ereignis.......................................... .......................................#13#10#13#1 0
Ereignis................................


Man sieht, das erste 'Extern', gehört aber noch zum 'Scharf' vom neuen lesen.

Das heißt es gehen keine Daten verloren, der Puffer wird nur nicht gleichmäßig ausgelesen.

Und da ich ja keinen Müll (Unvollständigen Datensätze) in meiner Datenbank haben möchte, entfallen somit immer der erste und letzte (Unvollständige Datensatz)

Chemiker 27. Feb 2009 20:17

Re: StringGrid mit Daten füllen und farblich Darstellen
 
Hallo Jens,

es geht mir um folgendes, es muss ein Event gestartet werden wenn ein vollständiger Datensatz im Buffer vorhanden ist. Dieses Event muss den Datensatz abholen und den Buffer genau um diese Zeichen löschen.

Wie groß ist der Buffer?

Bis bald Chemiker

Jens Hartmann 27. Feb 2009 20:36

Re: StringGrid mit Daten füllen und farblich Darstellen
 
Ja, so irgendwie, das Event, wäre kein Problem. Aber mir fehlen die Kenntnisse, wie ich das angehe. Wie lese ich aus der Variablen Buffer immer bis zum nächsten Datensatz, und wenn kein vollständiger mehr kommt, wieder den Puffer.

Ich denke mir das in etwa so...
Delphi-Quellcode:
procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var
  Daten : String;
  Satz  : String;
begin
  if Buffer = '' then                   //Durch die Abfrage ob Buffer leer ist, wird erreicht, das nicht neu gelesen wird.
  begin
    ComPort1.ReadStr(Daten, Count);
    Buffer:=Buffer+Daten;
    Bufferverarbeitung;
  end:
end;
Jetzt müsste ich aber die Var. Buffer so lange bearbeiten, bis keine Vollständiger Datensatz mehr da ist, diesen aber unvollständigen Datensatz Zwischenspeichern, danach die Var. Buffer leeren und neu einlesen. Durch die if-Abfrage beim einlesen, ist ja schonmal gewährleistet, das Buffer wirklich leer ist, bis neu gelesen wird.

Nachdem, aber Buffer neu eingelesen worden ist, muss natürlich der dann unvollständige erste datensatz natürlich wieder dem Zwischenspeicher zugeführt werden, und als erstes abgearbeitet werden.

Ich denke die Idee ist gut, aber es fehlt mir total an der Ausführung.
:gruebel:

Zitat:

Wie groß ist der Buffer?
Wie meinst Du das

Chemiker 27. Feb 2009 20:40

Re: StringGrid mit Daten füllen und farblich Darstellen
 
Hallo Jens,

wie viel Byte passen in den Buffer, oder welcher Datentype ist Buffer.

Bis bald Chemiker


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:28 Uhr.
Seite 6 von 11   « Erste     456 78     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz