Autor Beitrag
onkelthom
Hält's aus hier
Beiträge: 4

Windows XP
Rad Studio 2005, Interbase
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Do 23.04.09 11:08 
Der Textwert muss bei der Schreibweise aber vermutlich in ' gesetzt werden.

Also entweder:
ausblenden SQL-Anweisung
1:
update Tabelle set Feld = to_number('123') where...					


oder gleich so:
ausblenden 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.
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 4

Windows XP
Rad Studio 2005, Interbase
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 128
Erhaltene Danke: 1

WIN XP, WIN 7
Delphi 5 Ent, Delphi 2007 Pro, XE4
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Do 23.04.09 12:58 
wie wäre es mit einem einfachen

ausblenden Delphi-Quelltext
1:
StrToInt(DBEdit.Text)					


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:

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
onkelthom Threadstarter
Hält's aus hier
Beiträge: 4

Windows XP
Rad Studio 2005, Interbase
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Do 23.04.09 13:38 
user profile icononkelthom hat folgendes geschrieben Zum zitierten Posting springen:

@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 Threadstarter
Hält's aus hier
Beiträge: 4

Windows XP
Rad Studio 2005, Interbase
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 128
Erhaltene Danke: 1

WIN XP, WIN 7
Delphi 5 Ent, Delphi 2007 Pro, XE4
BeitragVerfasst: 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.