Entwickler-Ecke
Datenbanken - TDBEdit.text in Integer für Interbase
onkelthom - Do 23.04.09 11:04
Titel: TDBEdit.text in Integer für Interbase
Moin zusammen,
bin jetzt mit meiner Suche am Ende und komme mit dieser "Kleinigkeit" trotzdem nicht weiter.
Auf einem Formular setze ich TDBEdit´s ein um meine Datensätze anzuzeigen.
Diese werden bereitgestellt durch:
TIBQuery und TDatasource sowie einem TIBUpdateSQL für die Manipulation.
Es geht mir dabei um das eigentliche Update SQL.
Das TDBEdit hält eine Zahl, die ich in eine Integerfeld der Datenbank schreiben muss.
Normalerweise würde ich glauben dass ich das SQL wie folgt schreiben könte:
update Tabelle set Feld = to_number(Textwert) where ....
Das scheint allerdings nicht zu gehen. Ich habe auch schon wo gelesen, dass Delphi das von selber hinkriegen würde. Danach sieht es aber auch nicht aus.
Interbase möchte verständlicherweise ein Integer haben.
Hat jemand ne Idee für mich, was ich falsch mache ?
Gruß
vom Thomas
Nersgatt - Do 23.04.09 11:08
Der Textwert muss bei der Schreibweise aber vermutlich in ' gesetzt werden.
Also entweder:
SQL-Anweisung
1:
| update Tabelle set Feld = to_number('123') where... |
oder gleich so:
SQL-Anweisung
1:
| update Tabelle set Feld = 123 where... |
Wenn der Wert in einer Variablen steht, dann musst Du es eigentlich nur passend zusammensetzen, wenn Du sicher sein kannst, dass nur eine Zahl drin steht.
Delphi-Quelltext
1:
| sql := 'update Tabelle set Feld = ' + Variable + ' where...' |
Oder noch besser gleich Parameter verwenden!
onkelthom - Do 23.04.09 11:14
Hi
erstmal DANKE !
Joh - das sollte auch nur als Beispiel dienen ;-)
Ich mache das mit Parameter, das sieht dann bei mir so aus:
update Tabelle
set
Zahlenfeld = :Zahlenfeld
where
...
wobei :Zahlenfeld der Wert aus TDBEdit.text kommt.
"to_number" scheint für Interbase via IBExpert keine gültige Funktion zu sein
[highlight]Function unknown.
TO_NUMBER.[/highlight]
Nersgatt - Do 23.04.09 11:19
probier mal "cast(:zahlenfeld as integer)" bzw. "cast(:zahlenfeld as number(15,2))".
Aber wenn Du es so mit den Parametern machst, sollte es eigentlich nicht nötig sein, weil Du ja den Parameter von der Delphi-Seite aus schon mit dem richtigen Datentyp befüllst.
Andreas Schilling - Do 23.04.09 11:55
Lass die Komponente selber die Updateanweisung schreiben. Wenn du dabei bist das neu zu machen mit TIB... - Komponenten benutze gleich TIBDataset, das vereint Query und Updatekomponente. Für deinene jetzige Konfiguration:
- TIBUpdateSQL muß bei der TIBQuery als Updateobjekt eingetragen sein
- rechte Maustaste auf TIBUpdateSQL --> UpdateSQL Editor aufrufen --> Vorgabe für Datenmenge ausführen --> Primärschlüssel auswählen, bzw. manuell in der linken Spalte markieren (wird manchmal nicht richtig erkannt) --> SQL generieren
- jetzt kann unter der Registerkarte "SQL" die jeweilige SQL-Anweisung eingesehen werden
zuma - Do 23.04.09 12:58
wie wäre es mit einem einfachen
sollte dir den als string vorliegenden Zahlenwert in einen Integer wandeln.
*anmerkung*
Prüfst du eigentlich, ob in dbEdit.text auch wirklich
ne Zahl drin steht? (User sind ja sooo kreativ bei ihren Eingaben ....) :mrgreen:
onkelthom - Do 23.04.09 13:28
Was muss ich den machen um das TIBDataset in den Aktualisierungsmodus zu bringen ?
Das klappt bei mir nur, wenn ich da auch ein TIBUpdateSQL als UpdateObjekt dran hänge.
Glaube aber nicht dass, das der richtige Weg ist.
Wenn TIBQuery und TIBUpdateSQL im TIBDataset zusammengefasst sind, geht das doch bestimmt besser...
@zuma
Mit nem StrToInt(DBEdit.Text) komm ich doch an der Stelle nich wirklich weiter,
Delphi übergibt diesen Wert doch selber ,oder ?
Nersgatt - Do 23.04.09 13:30
Zeig doch mal bitte ewas mehr Quellcode, wie Du es im Moment versuchst.
zuma - Do 23.04.09 13:38
onkelthom hat folgendes geschrieben : |
@zuma
Mit nem StrToInt(DBEdit.Text) komm ich doch an der Stelle nich wirklich weiter,
Delphi übergibt diesen Wert doch selber ,oder ? |
Delphi übergibt nen String, (der bei dir eine Zahl sein soll),
und konvertiert NICHT automatisch Datentypen ...
ansonsten, wie Nersgatt schon sagt, zeig mal bissl Code, dann hilft sichs besser
onkelthom - Do 23.04.09 13:51
So viel mehr hab ich da gar nicht.
SQL aus dem TIBDataset:
update VW_Teile
set
BENUTZERID = :BENUTZERID,
BEZEICHNUNG = :BEZEICHNUNG,
DNS = :DNS,
GATEWAY = :GATEWAY,
HERSTELLERID = :HERSTELLERID,
HERSTELLERTEILENUMMER = :HERSTELLERTEILENUMMER,
where
ID = :OLD_ID
Die ID Felder sind auf der Datenbank Integer.
Vom Benutzer selber werden diese Werte nicht gefüllt und sind daher auch immer Zahlenwerte ;-)
Anstossen tu ich das so:
IBDS_Teile.Edit;
IBDS_Teile.UpdateRecord;
IBDS_Teile.Post;
Nersgatt - Do 23.04.09 13:55
Und wie füllst Du die Parameter? Lass Dir doch nicht alles aus der Nase ziehen.
Andreas Schilling - Do 23.04.09 13:57
Zitat: |
Wenn TIBQuery und TIBUpdateSQL im TIBDataset zusammengefasst sind, geht das doch bestimmt besser...
|
TIBDataset, rechte Maustaste --> Dataseteditor und weiter wie bei TIBUpdateSQL.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!