![]() |
Problem: Oracle+Delphi und Währungs- und Datumsfelder
Hallo Forum,
ich verwende als DB Oracle 7 und Delphi 7 Enterprise und muß ein Modul zur Verwaltung von Wechselkursen erstellen. Als Tabellenformat hatte ich zuerst ftCurr, jedoch hatte ich damit Schwierigkeiten bei den Konvertierungen in Delphi, ich konnte nicht per SQL in die ftCurr Felder schreiben, deshalb habe ich dafür im Moment ftString gewählt. Das wäre das erste, was muss ich dort allgemein beachten um ftCurr verwenden zu können? Tabellenformat: NAME:STRING WERT:STRING USER:STRING DATE:DATE Nun möchte ich vergleichen ob ein identischer Datensatz am selben Tag schon einmal angelegt wurde. Die Abfrage mit COUNT funktioniert auch sehr gut, jedoch nur solange ich nicht das DATE Feld mit in die WHERE Bedingung miteinbeziehe: Dann kommt der Fehler "Missing expression". Was fehlt steht leider nicht da. Meine Frage konkret: Wie müssten die Queries aussehen die einmal einen solchen Datensatz einfügen und zum 2. eine Query die Feststellt ob der am selben Tag schon mal ein Datensatz mit gleichem Inhalt eingefügt wurde. Ich bin inzwischen echt am verzeifeln, da ich mit der Fehlermeldung auch nicht wirklich was anfangen kann. Besten Dank, Hawkeye |
Re: Problem: Oracle+Delphi und Währungs- und Datumsfelder
Poste doch bitte die Query und die tatsächliche Fehlermeldung. Außerdem wäre es interessant zu wissen, wie Du die Anbindung an die OraDB gemacht hast, z.B. ADO.
|
Re: Problem: Oracle+Delphi und Währungs- und Datumsfelder
Ich fürchte, ich kann dir beim ersten nicht wirklich helfen. Da Ora7 so alt ist, dass ich es nur von Weitem zu meiner Schulzeit zu Gesicht bekam. (Diese Bugs sind mir in neueren Versionen nch nicht untergekommen) :oops:
Zitat:
Zitat:
Benötigt werden 100g Mehl, 4 Input- & 1 Output -Parameter (für den prim. Schlüssel)
SQL-Code:
begin
begin SELECT DeinPrimKey INTO :o_FoundPK FROM DeineTable -- Diese Kombi von Werte darf nur einen DS finden -- Ansonsten wirst du einen ORA-01422 (too_many_rows) ernten ;) WHERE Name = :i_Name and WERT = :i_WERT and EditUser = :i_User and EditDate = :i_Date; Exception When NO_Data_Found then -- Wird nichts gefunden -> INSERT :o_FoundPK := 0; end; if :o_FoundPK = 0 then INSERT INTO DeineTabelle (Name ,WERT ,EditUser ,EditDate) VALUES (:i_Name ,:i_WERT ,:i_User ,:i_Date) -- Dein Programm wird den neuen PK brauchen ;) RETURNING DeinPrimKey INTO :o_PK; end if; end; Das ganze ist im Prinzip ein etwas hässliches Work around für den Befehl MERGE aus Ora9. |
Re: Problem: Oracle+Delphi und Währungs- und Datumsfelder
Zitat:
ChkQ:
SQL-Code:
SELECT COUNT(*) FROM ER WHERE NAME='DOLLAR' AND WERT=:WERT AND DATE=trunc(sysdate)
Delphi-Quellcode:
Dann hätte ich über ChkQ.Fields[0] oder so (hab ich nicht mehr genau im Kopf) ob was da ist, so eine Abfrage verwende ich mehrmals in anderen Programmteilen, Ärger hab ich erst seit ich das Datum mitprüfen will.
with ChkQ do
begin ParamByName('WERT').AsString:=Edit.Text; Prepare; Open; end; Bringt mir bei anbindung über BDE 5 den Fehler "Missing Expression". Any hints ? MfG |
Re: Problem: Oracle+Delphi und Währungs- und Datumsfelder
Hallo,
Zitat:
MfG |
Re: Problem: Oracle+Delphi und Währungs- und Datumsfelder
Zitat:
|
Re: Problem: Oracle+Delphi und Währungs- und Datumsfelder
Zitat:
Ausserdem würde ich gerne wissen warum "meine" Query den Fehler produziert sobald das Datum ins Spiel kommt (hab ich oben gepostet). MfG |
Re: Problem: Oracle+Delphi und Währungs- und Datumsfelder
Zitat:
Zitat:
SQL-Code:
declare
lFoundRec Integer; begin begin SELECT 1 INTO lFoundRec FROM DeineTable -- Diese Kombi von Werte darf nur einen DS finden -- Ansonsten wirst du einen ORA-01422 (too_many_rows) ernten ;) WHERE Name = :i_Name and WERT = :i_WERT and EditUser = :i_User and EditDate = :i_Date; Exception When NO_DATA_FOUND then -- Wird nichts gefunden -> INSERT lFoundRec := 0; end; if lFoundRec = 0 then INSERT INTO DeineTabelle (Name ,WERT ,EditUser ,EditDate) VALUES (:i_Name ,:i_WERT ,:i_User ,:i_Date); end if; end; |
Re: Problem: Oracle+Delphi und Währungs- und Datumsfelder
Zitat:
Hmm, probier ich auch, auch wenn ich das nicht glaub, da es bisher auch so ging... Zitat:
SQL-Code:
[/quote]
declare
lFoundRec Integer; begin begin SELECT 1 INTO lFoundRec FROM DeineTable -- Diese Kombi von Werte darf nur einen DS finden -- Ansonsten wirst du einen ORA-01422 (too_many_rows) ernten ;) WHERE Name = :i_Name and WERT = :i_WERT and EditUser = :i_User and EditDate = :i_Date; Exception When NO_DATA_FOUND then -- Wird nichts gefunden -> INSERT lFoundRec := 0; end; if lFoundRec = 0 then INSERT INTO DeineTabelle (Name ,WERT ,EditUser ,EditDate) VALUES (:i_Name ,:i_WERT ,:i_User ,:i_Date); end if; end; Danke, probier ich am Montag 8:00 gleich aus ! :-) MfG |
Re: Problem: Oracle+Delphi und Währungs- und Datumsfelder
Zitat:
Code:
aber Date kannst Du als Feldnamen verwenden. Solltest Du aber trotzdem nicht ;). Auszug aus den Oracle Beispielen:
USER returns the name of the session user (the user who logged on) with the datatype VARCHAR2. Oracle compares values of this function with blank-padded comparison semantics.
In a distributed SQL statement, the UID and USER functions identify the user on your local database. You cannot use these functions in the condition of a CHECK constraint. Example The following example returns the current user and the user's UID: SELECT USER, UID FROM DUAL; USER UID ------------------------------ ---------- OE 33
Code:
For example, you can define a relational table to keep track of your contacts:
CREATE TABLE contacts ( contact external_person date DATE ); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz