![]() |
AW: Stringgrid oder dbgrid
Hallo Perlsau, Sir Rufo,
ich lege neuen Auftrag an und habe erstmal keine neue ID. Die erzeuge ich erst beim Speichern. Sir Rufo, die neue ID=0 ist klar, aber was passiert wenn 2 oder mehr Anwender gleichzeitig neue Aufträge anlegen? Luckner |
AW: Stringgrid oder dbgrid
Beim Speichern wird dann ein eindeutiger Schlüssel generiert
|
AW: Stringgrid oder dbgrid
Zitat:
|
AW: Stringgrid oder dbgrid
Zitat:
Zitat:
Und weil dem so ist, haben die Datenbank-System-Hersteller darauf geachtet, dass eine ID gesichert nur einmal vergeben wird. Darum braucht man sich eben keine Sorgen machen, da kann man auch eine Million Datensätze im exakt gleichen Zeitpunkt in der gleichen Tabelle der gleichen Datenbank erzeugen - aber nicht wundern, dass es etwas dauert, denn der Server verarbeitet diese gleichzeitigen Anfragen nacheinander ;) |
AW: Stringgrid oder dbgrid
Zitat:
Luckner: "Der Vorteil von einem Stringgrid ist, dass ich die Zellen füttern kann und erst beim Speichern des Auftrages die Positionen in die Datenbanktabelle schreibe." Wenn ja, worin besteht dieser Vorteil? Ob du jetzt als erstes die Auftragsdaten eingibst (Kunde, Datum, Verkäufer etc.) und den Auftrag anlegst, bevor du die Positionen abspeicherst, oder ob du das alles erst virtuell machst, um es dann als Ganzes zu speichern, bleibt sich doch gleich. Wenn du natürlich Hunderte oder mehr Fakturisten hast, die den ganzen Tag nichts anderes machen als Aufträge einzugeben, und das auch noch auf einem entfernten Server, wäre es natürlich, um Übertragungs-Ressourcen zu schonen, schon von Vorteil, nicht mehrere Transaktionen pro Auftrag ausführen zu müssen oder sogar mehrere Aufträge in einer Transaktion unterzubringen. Zitat:
Zitat:
|
AW: Stringgrid oder dbgrid
Was würde mir ein Auftrag auf dem Server bringen, wo nur der Kopf besteht aber noch keine Positionen?
Oder willst du die Transaktion so lange offen halten, bis alle Positionen drin sind? Und dann wird der Auftrag abgebrochen und der Datensatz muss gelöscht werden (oder storniert, was aber irgendwie nicht der Wahrheit ganz entspricht, denn der Auftrag ist nie zustande gekommen). Oder die Anwendung stürtzt ab, Strom fällt aus, etc. Dann doch lieber alles in einem Rutsch (eine Transaktion) wenn fertig in die Datenbank schreiben. Dann braucht man auch nicht aufräumen, weil man es niemals durcheinander gebracht hat. Das ist auch der Weg um den Auftrag wieder zu bearbeiten. Alles einlesen, bearbeiten und dann alle Änderungen in einem Rutsch wieder zurück in die Datenbank. Und so ein ClientDataSet bringt dafür schon alles von Haus aus mit. |
AW: Stringgrid oder dbgrid
Danke :thumb:
Das hab ich jetzt verstanden :stupid: |
AW: Stringgrid oder dbgrid
Hallo Sir Rufo,
das ist genau die Erklärung, die ich versucht habe hier zu bringen. Irgenwie tendiere ich deshalb zum Stringgrid. Aber die Handhabe mit so einem Grid ist mir noch völlig schleierhaft. Habe schon einige Sachen probiert, manche Sachen funktionieren auch. Aber so richtig kann ich mit dem Stringgrid nichts anfangen. Zellen füllen schon. Beim Blob wird schon schwieriger. Jetzt habe ich ein TMS.Grid endeckt. Mal schauen. Luckner. |
AW: Stringgrid oder dbgrid
Du kannst jedes beliebige Grid nehmen, aber warum nicht beim DBGrid bleiben? Da wird dir vieles schon abgenommen, was du anders erst wieder umständlich implementieren musst.
Es wäre auch sehr hilfreich, wenn man die Delphi-Version wüsste - ganz findige User tragen die Version einfach in ihr Profil ein, schon hat man das immer vor Augen. |
AW: Stringgrid oder dbgrid
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Delphi-Quellcode:
Procedure TFormDeckblatt.DBGrid_DeckblattDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
Var Bild : TImage; begin If DatMod.Qset_Deckblatt.RecordCount > 0 Then Begin If Column.FieldName = 'BLATT' Then Begin Bild := TImage.Create(Self); Try Bild.Visible := False; Bild.Width := 300; Bild.Height := 300; Bild.Center := True; Bild.Proportional := True; Bild.Stretch := True; If DatMod.BlobToImage(DatMod.Qset_Deckblatt.FieldByName('BLATT'),Bild) Then Begin DBGrid_Deckblatt.Canvas.FillRect(Rect); DBGrid_Deckblatt.Canvas.StretchDraw(Rect,Bild.Picture.Bitmap); End; Finally Bild.Free; End; End; End; end; Function TDatMod.BlobToImage(Feld: TField; Bild: TImage): Boolean; Var S : TStream; JBild : TJpegImage; begin Result := False; IF Feld.IsNull THEN Exit; JBild := TJPegImage.Create; S := Feld.DataSet.CreateBlobStream(Feld, bmRead); Try JBild.LoadFromStream(S); Bild.Picture.Bitmap.Assign(JBild); Result := True; Finally S.Free; JBild.Free; End; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz