AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Werte im DBGrid ändern
Thema durchsuchen
Ansicht
Themen-Optionen

Werte im DBGrid ändern

Ein Thema von aurikel_Max · begonnen am 2. Apr 2010 · letzter Beitrag vom 4. Apr 2010
Antwort Antwort
Seite 4 von 5   « Erste     234 5      
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.298 Beiträge
 
Delphi 12 Athens
 
#31

Re: Werte im DBGrid ändern

  Alt 4. Apr 2010, 17:50
Laß diesen Browser mal außen vor...

Nimm eine zusätzliche Query für das "befüllen" dazu das INSERT mit Parametern.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#32

Re: Werte im DBGrid ändern

  Alt 4. Apr 2010, 17:57
Oder wenn es eben mit diesem Browser sein muss, dann im vorgegebenen Format.INSERT INTO Tabelle(Datum) VALUES('2010-01-01')
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
aurikel_Max

Registriert seit: 9. Okt 2009
86 Beiträge
 
#33

Re: Werte im DBGrid ändern

  Alt 4. Apr 2010, 18:54
Also, ich habe mir gerad zu Testzwecken ein kleines Programm geschrieben, das erzeugt die Datenbank nach folgenden Befehlen:

Delphi-Quellcode:
dsqlDatabase.DatabaseName := 'aktien.db';
dsqlDatabase.CreateDatabase;
dsqlDatabase.Execute16('CREATE TABLE aktienwerte (Datum DATE);');
Jetzt hab ich in den Demos zu der Komponente etwas gefunden, das hab ich mal für meinen Fall umgeschrieben:
Delphi-Quellcode:
procedure TfmDate.btInsertClick(Sender: TObject);
const
  InsertSQL = 'INSERT INTO aktienwerte (Datum) VALUES (?);';
var
  Datum: string;
  Stmt: TDISQLite3Statement;
begin
  Datum := '2010-12-01';
  Stmt := dsqlDatabase.Prepare16(InsertSQL);
  try
    Stmt.Bind_Str16(1, Datum);
    Stmt.Step;
  finally
    Stmt.Free;
  end;
end;
Das entspricht doch den Parametern oder?
Dennoch speichere ich im Moment das Datum ebenfalls als String ab (oder?), allerdings gibt es auch keine Stmt.Bind_Date Funktion in der Demo hatte ich allerdings zu dem Punkt folgendes Zitat gefunden:
Zitat:
{ We bind all columns as strings. DISQLite3 will convert them to
integers or floats as appropriate. }
(wobei mein Datum ja trotzdem kein Integer bzw. Float ist)

Jetzt hatte ich ebenfalls probiert, ein Insert über die Query-Komponente zu versuchen, dabei hatte ich folgendes geschrieben:

Delphi-Quellcode:
procedure TfmDate.btInsert2Click(Sender: TObject);
begin
  dsqlQuery.InsertSQL :=
    'INSERT INTO aktienwerte (Datum) VALUES (:Datum);';
  dsqlQuery.Params.ParamByName('Datum').Value := StrtoDate('2010/12/01');
  dsqlQuery.Insert;
end;
Dabei bekomm ich aber immer den Fehler, dass 2010-12-01 kein gültiges Datum ist. (ich hatte ebenfalls "20101201", 2010.12.01, "2010,12,01" und 2010/12/01 versucht -> überall der gleiche Fehler).


Über die erste Insert-Methode konnte ich Werte in die Datenbank schreiben (auch wenn ich das Datum als String speichere), wenn ich die gespeicherten Werte nun anzeigen möchte, wird mir in dem DBGrid nur "2010" angezeigt.

(bei Interesse kann ich auch gern den ganzen Code posten bzw. hochladen)
Max
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.298 Beiträge
 
Delphi 12 Athens
 
#34

Re: Werte im DBGrid ändern

  Alt 4. Apr 2010, 19:18
mach mal...ich hab heute Zeit. Und das nagt an meiner Ehre

...ohne Schießgewähr
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#35

Re: Werte im DBGrid ändern

  Alt 4. Apr 2010, 19:27
Funktioniert das Statement von oben denn im DB-Browser?
Zitat:
INSERT INTO Tabelle(Datum) VALUES('2010-01-01')
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
aurikel_Max

Registriert seit: 9. Okt 2009
86 Beiträge
 
#36

Re: Werte im DBGrid ändern

  Alt 4. Apr 2010, 19:41
Zitat von haentschman:
mach mal...ich hab heute Zeit. Und das nagt an meiner Ehre

...ohne Schießgewähr
Ok, ich lad die Sachen gleich hoch, aber es gibt eine Sache, die ich nicht verstehe:

Ich hab gerad nochmal folgendes gemacht:
Delphi-Quellcode:
procedure TfmDate.dsqlQueryAfterOpen(DataSet: TDataSet);
begin
  dsqlQuery.FieldByName('Datum').AsString;
end;
(danach habe ich "dsqlQuery.FieldByName('Datum').AsString in die Watchliste getan und auf das obere einen Haltepunkt gesetzt (auch wenn es keinen Effekt hat))
Die Watchliste zeigt mir nur "2010" an, ich versteh einfach nicht, wo der Rest von dem Datum bleibt.

Edit:
Zitat von DeddyH:
Funktioniert das Statement von oben denn im DB-Browser?
Zitat:
INSERT INTO Tabelle(Datum) VALUES('2010-01-01')
Er fügt die Werte zwar ein, aber im DBGrid wird mir nur "2010" angezeigt.
Max
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.298 Beiträge
 
Delphi 12 Athens
 
#37

Re: Werte im DBGrid ändern

  Alt 4. Apr 2010, 20:04
schau dir mal in der Zwischenzeit das an. Da geht es darum, daß SQLite einfach Feldtypen ändert. Vieleicht liegt der Knackpunkt da.
  Mit Zitat antworten Zitat
aurikel_Max

Registriert seit: 9. Okt 2009
86 Beiträge
 
#38

Re: Werte im DBGrid ändern

  Alt 4. Apr 2010, 20:40
Zitat von haentschman:
schau dir mal in der Zwischenzeit das an. Da geht es darum, daß SQLite einfach Feldtypen ändert. Vieleicht liegt der Knackpunkt da.
Okay, jetzt wird mir klar, wieso nur ein Teil zurückgeliefert wird.

Delphi-Quellcode:
procedure TfmDate.dsqlQueryInitFieldDef(const AColumn: TDISQLite3Column;
  const AFieldDef: TFieldDef);
begin
  if AColumn.ColumnName = 'Datumthen
    AFieldDef.DataType := ftDate;
end;
Hab AFieldDef.DataType in die Watchliste getan und Haltepunkte gesetzt, AFieldDef ist vorher ein ftFloat, das erklärt wieso aus
2010,04,02 -> 2010,04
2010-04-02 -> 2010
usw. wird.

Nachdem ich den Feldtypen auf ftDate umgewandelt hab, bekomm ich den Fehler, dass "-1710415.0" kein gültiger "timestamp" ist, liegt das an der Formatierung? (das werd ich gleich mal testen)

Edit: Also, ich hab das Datum mal ohne Trennzeichen formatiert 20100201 (für den 2010.02.01 -> 01.02.2010). Das Ergebnis ist, dass mein DBGrid nun 06.12.50320 anzeigt, dass erinnert mich wieder an das, was eine Freundin gesagt hat:
Zitat:
50320 könnten die tage von 1900 an sein
kommt das hin?

Edit2:
Hab gerad nochmal nachgeschaut, hat das was mit dem "30.12.1899" zu tun? Ich begeb mich mal an das Umrechnen.
Max
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.298 Beiträge
 
Delphi 12 Athens
 
#39

Re: Werte im DBGrid ändern

  Alt 4. Apr 2010, 22:15
aaalsooo...

Ich habe jetzt 1,5 Stunden gebraucht um das Datum darzustellen. Dabei hab ich mit keinem vernünftigen SQL mit Parametern den Wert in die DB bekommen. Nach Studium der Demo DateTime und abschreiben ist es mir dennoch gelungen.

Fazit zu SQLite3 (mein persönliches):

- keine Vernünftige Query, wo man nur einfach ein Insert ausführen kann.
(Bei der Zuweisung des SQLInsert Strings Fehlermeldung SQL is Empty )
- Die Query kann nicht direkt an eine Datasource gebunden werden -> Fehlermeldung
- für mich persönlich unübersichtlich bis unlogisch
- das ist für jeden selbst die Entscheidung ob er damit arbeitet.

Im Anhang dein Testprojekt zurück:
- Entschuldige die Unordnung, stammt vom vielen herumprobieren.

Es funktioniert:
- DB Erstellen
- der Feldtyp für ein Datumsfeld muß REAL sein wie unlogisch mit DATE geht´s in die Hose
- Insert 3
- im SQL muß der Datumswert (String) in der Form yyyy-mm-dd vorliegen. Alles andere geht daneben. Gleichzeitig muß der String innerhalb des SQL noch mit der Funktion julianday umgewandelt werden.
- im Feld Init muß dann der Feldtyp auf ftDate gestellt werden.
--> Dann wird das Datum im Grid als dd.mm.yyyy angezeigt.

...was ein Krampf.

Tip:
Da du mit Aktien und Kursen arbeitest, dieses dann vieleicht noch auswerten willst lege ich dir, wenn es kostenlos sein soll, Firebird in Verbindung mit Zeos ans Herz. Unkompliziert, Volles SQL mit gescheiten Parametern, übersichtlich.

Ich kann nicht sehen, wenn sich jemand quält. Frage nach, wenn du das in Betracht ziehst. Jetzt stehst du noch am Anfang da ist der Einstieg leicht. Die einfachen Sachen wird man mit SQLite machen können. Wenn es aber komplizierter wird, die SQL´s komplexer bist du ohne vernünftige Parameterverarbeitung erschossen.

PS: meine Platte hat das ganze wieder los
Angehängte Dateien
Dateityp: zip 2010.04.03-date_165.zip (686,3 KB, 2x aufgerufen)
  Mit Zitat antworten Zitat
aurikel_Max

Registriert seit: 9. Okt 2009
86 Beiträge
 
#40

Re: Werte im DBGrid ändern

  Alt 4. Apr 2010, 22:35
Zitat von haentschman:
aaalsooo...

Ich habe jetzt 1,5 Stunden gebraucht um das Datum darzustellen. Dabei hab ich mit keinem vernünftigen SQL mit Parametern den Wert in die DB bekommen. Nach Studium der Demo DateTime und abschreiben ist es mir dennoch gelungen.

Fazit zu SQLite3 (mein persönliches):

- keine Vernünftige Query, wo man nur einfach ein Insert ausführen kann.
(Bei der Zuweisung des SQLInsert Strings Fehlermeldung SQL is Empty )
- Die Query kann nicht direkt an eine Datasource gebunden werden -> Fehlermeldung
- für mich persönlich unübersichtlich bis unlogisch
- das ist für jeden selbst die Entscheidung ob er damit arbeitet.

Im Anhang dein Testprojekt zurück:
- Entschuldige die Unordnung, stammt vom vielen herumprobieren.

Es funktioniert:
- DB Erstellen
- der Feldtyp für ein Datumsfeld muß REAL sein wie unlogisch mit DATE geht´s in die Hose
- Insert 3
- im SQL muß der Datumswert (String) in der Form yyyy-mm-dd vorliegen. Alles andere geht daneben. Gleichzeitig muß der String innerhalb des SQL noch mit der Funktion julianday umgewandelt werden.
- im Feld Init muß dann der Feldtyp auf ftDate gestellt werden.
--> Dann wird das Datum im Grid als dd.mm.yyyy angezeigt.

...was ein Krampf.

Tip:
Da du mit Aktien und Kursen arbeitest, dieses dann vieleicht noch auswerten willst lege ich dir, wenn es kostenlos sein soll, Firebird in Verbindung mit Zeos ans Herz. Unkompliziert, Volles SQL mit gescheiten Parametern, übersichtlich.

Ich kann nicht sehen, wenn sich jemand quält. Frage nach, wenn du das in Betracht ziehst. Jetzt stehst du noch am Anfang da ist der Einstieg leicht. Die einfachen Sachen wird man mit SQLite machen können. Wenn es aber komplizierter wird, die SQL´s komplexer bist du ohne vernünftige Parameterverarbeitung erschossen.

PS: meine Platte hat das ganze wieder los
Ich danke Dir für die Zeit, die Du aufgebracht hast.

Ich hatte mich für SQLite und DISQLite3 Personal entschieden, da ich so meinem Vater (für den ich das Programm schreibe) lediglich die .exe mitgeben muss (nicht mal eine .dll) und nichts extra installieren muss. Von Firebird gibt es doch eine embedded-Version oder? (das werd ich mir morgen genauer anschauen, vielleicht auch jetzt gleich noch, will aber noch ein Buch auslesen ).

Zitat von haentschman:
- keine Vernünftige Query, wo man nur einfach ein Insert ausführen kann.
(Bei der Zuweisung des SQLInsert Strings Fehlermeldung SQL is Empty
Die Fehlermeldung bezieht sich auf das SelectSQL-Statement, wenn das leer ist, geht auch kein Insert.

Ich danke Dir für Deine Hilfsbereitschaft!

Zitat von haentschman:
Ich kann nicht sehen, wenn sich jemand quält. Frage nach, wenn du das in Betracht ziehst. Jetzt stehst du noch am Anfang da ist der Einstieg leicht. Die einfachen Sachen wird man mit SQLite machen können. Wenn es aber komplizierter wird, die SQL´s komplexer bist du ohne vernünftige Parameterverarbeitung erschossen.
Ich werde mir gleich bzw. morgen Firefox embedded und die Zeos-Komponente angucken, wenn ich umsteigen sollte und fragen habe, werd ich sie stellen.

Ich danke Dir und DeddyH für Eure Hilfsbereitschaft! (geht leider nur virtuell (das Anstoßen) )
Max
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 5   « Erste     234 5      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:40 Uhr.
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