Autor |
Beitrag |
onkelthom
Hält's aus hier
Beiträge: 4
Windows XP
Rad Studio 2005, Interbase
|
Verfasst: Do 23.04.09 11:04
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
_________________ ==================================
Nicht reden - machen - weil geht nicht - gibt´s nicht !
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: 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!
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
onkelthom 
Hält's aus hier
Beiträge: 4
Windows XP
Rad Studio 2005, Interbase
|
Verfasst: 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]
_________________ ==================================
Nicht reden - machen - weil geht nicht - gibt´s nicht !
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: 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.
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
Andreas Schilling
      
Beiträge: 128
Erhaltene Danke: 1
WIN XP, WIN 7
Delphi 5 Ent, Delphi 2007 Pro, XE4
|
Verfasst: 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
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: Do 23.04.09 12:58
wie wäre es mit einem einfachen
Delphi-Quelltext
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 ....) 
_________________ Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
|
|
onkelthom 
Hält's aus hier
Beiträge: 4
Windows XP
Rad Studio 2005, Interbase
|
Verfasst: 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 ?
_________________ ==================================
Nicht reden - machen - weil geht nicht - gibt´s nicht !
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Do 23.04.09 13:30
Zeig doch mal bitte ewas mehr Quellcode, wie Du es im Moment versuchst.
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
zuma
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: 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
_________________ Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
|
|
onkelthom 
Hält's aus hier
Beiträge: 4
Windows XP
Rad Studio 2005, Interbase
|
Verfasst: 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;
_________________ ==================================
Nicht reden - machen - weil geht nicht - gibt´s nicht !
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Do 23.04.09 13:55
Und wie füllst Du die Parameter? Lass Dir doch nicht alles aus der Nase ziehen.
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
Andreas Schilling
      
Beiträge: 128
Erhaltene Danke: 1
WIN XP, WIN 7
Delphi 5 Ent, Delphi 2007 Pro, XE4
|
Verfasst: 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.
|
|