Seite 1 von 1

Datum in Datenbank schreiben

Verfasst: Mo 3. Jun 2019, 11:48
von Melsmann
Moin, Moin!

ich habe mal wieder ein Problem mit der SQL-Datenbank:
Über einen DateChooser gebe ich ein Datum ein. Egal, was ich anstelle, ich bekomme es nicht in eine Tabelle geschrieben. gambas code
Public Sub btnSpeichern_Click()

  Dim Datum As String
  datum = Format(DateChooser.Value, "yyyy-mm-dd")
  
  Select Message.Question("Sollen die Daten gespeichert werden?", "Ja", "Nein")
  Case 1
  query = "insert into Abrech_Stunden (Personal_ID, Datum, Stunden, Taetigkeit, Abgerechnet)values ('" & cboPerson.text & "','" & Datum & "','" & cboStunden.text & "','" & cboTaetigkeit.text & "','" & cboAbgerechnet.text & "')"
  databaseConnection.Exec(query)
  Fill  
  btnSpeichern.Enabled = False
  Case 2
  End Select
 Fill

End
Sondern bekomme die folgende Fehlermeldung:
Queiry failed: Data truncated for Column 'Stunden' at ....

Hat jemand ne Idee dazu?

Grüße Melsmann

Re: Datum in Datenbank schreiben

Verfasst: Mo 3. Jun 2019, 14:05
von tionov
Was für eine Datenbank?

Das was du da machst scheint mir sehr gefährlich. Kann da jemand freien Text eingeben? Das macht SQL-Injections möglich. Schon aus diesem Grund ist es sehr schlechter Stil, einen Text-String aus einer Formularfeld ungeprüft in einen SQL String zu übernehmen und diesen die DB ausführen zu lassen.

Bevor du deine eigenen Prüfroutinen schreibst, ist es besser, das Gambas machen zu lassen.

Nimm einfach für ein Insert ein Gambas Result:
http://gambaswiki.org/wiki/comp/gb.db/result

Und zwar ein mit Create erstelltes:
http://gambaswiki.org/wiki/comp/gb.db/_ ... on/create/

Dann kannst du schreiben:
gambas code
Dim res as Result

res = DBCon.Create("Abrech_Stunden")
res!Datum = DateChooser.Value
'... usw ...
res.Update

Re: Datum in Datenbank schreiben

Verfasst: Mo 3. Jun 2019, 15:45
von Melsmann
Erstmal vielen Dank für deine schnelle Antwort.

Mein Weg war der Weg, den ich bei MS VB gegangen bin und den ich kannte. So weit, so gut ! :D

Kann ich durch den von Dir skizzierten Weg mein gesamtes INSERT ersetzen? Was prüft Gambas da ab? Kann ich diesen Weg auch für UPDATE benutzen?

Gruß Melsmann

Re: Datum in Datenbank schreiben

Verfasst: Mo 3. Jun 2019, 16:47
von tionov
Melsmann hat geschrieben:
Mo 3. Jun 2019, 15:45
Kann ich durch den von Dir skizzierten Weg mein gesamtes INSERT ersetzen? Was prüft Gambas da ab? Kann ich diesen Weg auch für UPDATE benutzen?
Natürlich kann dein ganzes Insert so behandelt werden, dafür schrieb ich die drei Pünktchen. Vielleicht magst du es mal ausprobieren?

Update geht ebenfalls mit dem Result-Objekt, schau dir die Methoden an:
http://gambaswiki.org/wiki/comp/gb.db/result

Create Read/Write
Edit Read/Write
Exec Read Only
Find Read Only
Was prüft Gambas da ab?
Tja, da bleibt dir nur ein Blick in die Gambas-Sourcen, wenn du diese Frage abschließend beantwortet wissen willst. Ich gehe davon aus, dass Gambas einen Fehler wirft, wenn du mit diesen Methoden einem Date-field der DB einen Textstring unterjubeln möchtest. Und es wird verhindern, dass du einen Textstring mit Zeichen versiehst, die SQL Injections ermöglichen.

https://de.wikipedia.org/wiki/SQL-Injection

Schlicht, ich weiß es nicht. Das hängt aber alles von der DB ab, darum fragte ich, welche DB? Hier findest du z.B. die Sourcen für Sqlite3:
https://gitlab.com/gambas/gambas/tree/m ... db.sqlite3

Beschäftige dich mal mit http://gambaswiki.org/wiki/comp/gb.db

Re: Datum in Datenbank schreiben

Verfasst: Mo 3. Jun 2019, 18:02
von Melsmann
Dank Dir nochmal für die Tipps.

Ich werde mir die Links mal zu Gemüte führen. :D

Gruß Melsmann

Re: Datum in Datenbank schreiben

Verfasst: Di 4. Jun 2019, 06:28
von tionov
Melsmann hat geschrieben:
Mo 3. Jun 2019, 18:02
Dank Dir nochmal für die Tipps.

Ich werde mir die Links mal zu Gemüte führen. :D
Aber gerne, wenn du weitere Fragen hast, nur zu ... :-)