AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Problem: Oracle+Delphi und Währungs- und Datumsfelder
Thema durchsuchen
Ansicht
Themen-Optionen

Problem: Oracle+Delphi und Währungs- und Datumsfelder

Ein Thema von Hawkeye · begonnen am 6. Aug 2004 · letzter Beitrag vom 7. Aug 2004
Antwort Antwort
Seite 1 von 2  1 2      
Hawkeye

Registriert seit: 6. Aug 2004
13 Beiträge
 
#1

Problem: Oracle+Delphi und Währungs- und Datumsfelder

  Alt 6. Aug 2004, 17:09
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
DATEATE


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
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Problem: Oracle+Delphi und Währungs- und Datumsfelder

  Alt 6. Aug 2004, 17:19
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.
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#3

Re: Problem: Oracle+Delphi und Währungs- und Datumsfelder

  Alt 6. Aug 2004, 17:44
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)

Zitat:
Als Tabellenformat hatte ich zuerst ftCurr...
Klingt für mich nach einem Delphi-Typ, welchen Typen hat deine Spalte in Ora?

Zitat:
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.
Da kann ich dir helfen

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.
  Mit Zitat antworten Zitat
Hawkeye

Registriert seit: 6. Aug 2004
13 Beiträge
 
#4

Re: Problem: Oracle+Delphi und Währungs- und Datumsfelder

  Alt 6. Aug 2004, 17:55
Zitat von Union:
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.
Hallo,

ChkQ:
SELECT COUNT(*) FROM ER WHERE NAME='DOLLARAND WERT=:WERT AND DATE=trunc(sysdate)
Delphi-Quellcode:
with ChkQ do
begin
  ParamByName('WERT').AsString:=Edit.Text;
  Prepare;
  Open;
end;
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.

Bringt mir bei anbindung über BDE 5 den Fehler "Missing Expression".

Any hints ?

MfG
  Mit Zitat antworten Zitat
Hawkeye

Registriert seit: 6. Aug 2004
13 Beiträge
 
#5

Re: Problem: Oracle+Delphi und Währungs- und Datumsfelder

  Alt 6. Aug 2004, 17:59
Hallo,

Zitat von Robert_G:
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)

Ich kann sie mir leider nicht aussuchen.....

Zitat:
Als Tabellenformat hatte ich zuerst ftCurr...
Klingt für mich nach einem Delphi-Typ, welchen Typen hat deine Spalte in Ora?

stimmt. ist delphi, unter ORA wirs als NUMBER(xx,x) angelegt.

Zitat:
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.
Da kann ich dir helfen

Das ganze ist im Prinzip ein etwas hässliches Work around für den Befehl MERGE aus Ora9.
Geht das Ganze auch ohne den Primärkey ?

MfG
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#6

Re: Problem: Oracle+Delphi und Währungs- und Datumsfelder

  Alt 6. Aug 2004, 18:09
Zitat von Hawkeye:
Geht das Ganze auch ohne den Primärkey ?
Was hast du gegen Primärschlüssel?
  Mit Zitat antworten Zitat
Hawkeye

Registriert seit: 6. Aug 2004
13 Beiträge
 
#7

Re: Problem: Oracle+Delphi und Währungs- und Datumsfelder

  Alt 6. Aug 2004, 18:12
Zitat von Robert_G:
Zitat von Hawkeye:
Geht das Ganze auch ohne den Primärkey ?
Was hast du gegen Primärschlüssel?
Ich habe nichts explizit dagegen, nur hat die Tablle keinen .
Ausserdem würde ich gerne wissen warum "meine" Query den Fehler produziert sobald das Datum ins Spiel kommt (hab ich oben gepostet).

MfG
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#8

Re: Problem: Oracle+Delphi und Währungs- und Datumsfelder

  Alt 6. Aug 2004, 18:27
Zitat von Hawkeye:
Ausserdem würde ich gerne wissen warum "meine" Query den Fehler produziert sobald das Datum ins Spiel kommt (hab ich oben gepostet).
  • 1. "DATE" hat als DatenType Vorrang vor Variablen-/Spalten-/Tabellennamen -> boom.
    Du solltest also deine Spalten Date & User sofort umbenennen!
    Das sind reservierte Keywords, die dir anscheinend durch einen Bug in Ora7 nicht sofort um die Ohren gehauen wurden. (Darauf hatte ich vorhwer nicht geachtet.
  • 2. Setze am Besten ein Leerzeichen zwischen "=" und ":Value", es ist möglich, dass die DB den Parameter nicht erkennt.


Zitat von Hawkeye:
Geht das Ganze auch ohne den Primärkey ?
Auch wenn es irgendwie komisch ist, hier: (DBAs ohne PK kommen nicht in den Himmel )
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;
  Mit Zitat antworten Zitat
Hawkeye

Registriert seit: 6. Aug 2004
13 Beiträge
 
#9

Re: Problem: Oracle+Delphi und Währungs- und Datumsfelder

  Alt 6. Aug 2004, 20:10
Zitat von Robert_G:
Zitat von Hawkeye:
Ausserdem würde ich gerne wissen warum "meine" Query den Fehler produziert sobald das Datum ins Spiel kommt (hab ich oben gepostet).
  • 1. "DATE" hat als DatenType Vorrang vor Variablen-/Spalten-/Tabellennamen -> boom.
    Du solltest also deine Spalten Date & User sofort umbenennen!
    Das sind reservierte Keywords, die dir anscheinend durch einen Bug in Ora7 nicht sofort um die Ohren gehauen wurden. (Darauf hatte ich vorhwer nicht geachtet.

  • Danke, das könnte natürlich gut möglich sein.

    Zitat:
  • 2. Setze am Besten ein Leerzeichen zwischen "=" und ":Value", es ist möglich, dass die DB den Parameter nicht erkennt.

Hmm, probier ich auch, auch wenn ich das nicht glaub, da es bisher auch so ging...



Zitat von Hawkeye:
Geht das Ganze auch ohne den Primärkey ?
Auch wenn es irgendwie komisch ist, hier: (DBAs ohne PK kommen nicht in den Himmel )
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;
[/quote]

Danke, probier ich am Montag 8:00 gleich aus !

MfG
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Problem: Oracle+Delphi und Währungs- und Datumsfelder

  Alt 6. Aug 2004, 22:03
Zitat von Robert_G:
Ausserdem würde ich gerne wissen warum "meine" Query den Fehler produziert sobald das Datum ins Spiel kommt (hab ich oben gepostet).
1. "DATE" hat als DatenType Vorrang vor Variablen-/Spalten-/Tabellennamen -> boom.
Du solltest also deine Spalten Date & User sofort umbenennen!
Das sind reservierte Keywords, die dir anscheinend durch einen Bug in Ora7 nicht sofort um die Ohren gehauen wurden. (Darauf hatte ich vorhwer nicht geachtet.
Er hat bei USER recht:
Code:
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
aber Date kannst Du als Feldnamen verwenden. Solltest Du aber trotzdem nicht . Auszug aus den Oracle Beispielen:
Code:
For example, you can define a relational table to keep track of your contacts:

CREATE TABLE contacts (
  contact    external_person
  date       DATE );
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz