Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Probleme bei Insert in Oracle DB (9.2.0) (https://www.delphipraxis.net/46090-probleme-bei-insert-oracle-db-9-2-0-a.html)

PanTau64 18. Mai 2005 11:25

Datenbank: Oracle • Version: 9.2.0 • Zugriff über: Direkt

Probleme bei Insert in Oracle DB (9.2.0)
 
Hi Folks,

ich habe folgendes Problem. Im nachfolgendem Code versuche ich Daten in eine kleine Oracle-Tabelle zu schreiben. Wenn ich nur Stringfelder verwende, habe ich kein Problem. Bei dem Datum und dem Integer Wert bekomme ich jedesmal die Meldung "DBX-Fehler Ungültiger Feldtyp". Ich habe schon jeden erdenklichen nummerischen Feldtyp in Oracle zugewiesen, aber es will einfach nicht klappen. :wall:

Über schnelle Hilfe würde ich mich tierisch freuen.

PS: Ich verwende übrigens die Komponenten TSQLConnection und TSQLQuery.
PSS: Habe zwar lange Jhare entwickelt, aber immer nur in Zusammenarbeit mit BDE und Paradox, also entschuldigt, wenn ich mein Beispiel Fehler enthält. :?

cheers Olaf

Delphi-Quellcode:
Code:

*********************************************************************
procedure TForm1.Button1Click(Sender: TObject);
var
    sSql : String;
    stmtParams: TParams;
begin
    SQLConnect1.Connected := True;
    SQLQuery1.SQL.Clear;
    sSql := '';
    sSql := 'INSERT INTO DATAMART_ERR_LOG ' +
            '(DATAMART, CUBE, TRANFORMER_DATE, ' +
            '(DATAMART, CUBE, ' +
            'CODE, DESCRIPTION, SEQ) ' +
            'VALUES (:Datamart, :Cube, :Transformer_Date, ' +
            'VALUES (:Datamart, :Cube, ' +
            ':Code, :Description, :SEQ)';
    SQLQuery1.SQL.Add(sSql);
    SQLQuery1.Params[0].AsString := 'FUS';
    SQLQuery1.Params[1].AsString := 'FuS_Behaelter';
    SQLQuery1.Params[2].AsDateTime := Now;
    SQLQuery1.Params[2].AsString := '12345678';
    SQLQuery1.Params[3].AsString := 'Dies ist ein Test';
    SQLQuery1.Params[4].AsInteger := 250;
    SQLQuery1.ExecSQL(False);
    SQLConnect1.Connected := False;
end;

Akut-Programming 18. Mai 2005 11:30

Re: Probleme bei Insert in Oracle DB (9.2.0)
 
Hi,

versuchst du in eine Tabelle zu schreiben oder in zwei? Wenn in eine, warum dann 2x "Values"? Hastes schonma versucht, in dem du n Datum fest übergibst und das dann mit to_date() (<--- is ne Oracle Funktion) umwandelst??

Igotcha 18. Mai 2005 11:31

Re: Probleme bei Insert in Oracle DB (9.2.0)
 
Da Du mit Parameter-Indices arbeitest, fällt mir erstmal auf, dass Du 8 Parameter in Deinem SQL-Statement hast, aber nur 5 Parameter übergibst, wovon 1 doppelt vorhanden ist.

Du benutzt in Deinem SQL-Statement einige Parameter mehrmals, warum übergibst Du diese dann nicht so:

Delphi-Quellcode:
SQLQuery1.ParamByName('CUBE').asString:='FUS';

PanTau64 18. Mai 2005 11:38

Re: Probleme bei Insert in Oracle DB (9.2.0)
 
Sorry aber ich habe beim kopieren einen Fehler gemacht. Die Zeile mit "Values" ist zweimal reingerutscht. Der "richtige" Code muss sein:

cheers

Code:
Delphi-Quellcode:
********************************************************************* 
procedure TForm1.Button1Click(Sender: TObject);
var
    sSql : String;
    stmtParams: TParams;
begin
    SQLConnect1.Connected := True;
    SQLQuery1.SQL.Clear;
    sSql := '';
    sSql := 'INSERT INTO DATAMART_ERR_LOG ' + 
            '(DATAMART, CUBE, TRANFORMER_DATE, ' + 
            'CODE, DESCRIPTION, SEQ) ' + 
            'VALUES (:Datamart, :Cube, :Transformer_Date, ' + 
            ':Code, :Description, :SEQ)';
    SQLQuery1.SQL.Add(sSql);
    SQLQuery1.Params[0].AsString := 'FUS';
    SQLQuery1.Params[1].AsString := 'FuS_Behaelter';
    SQLQuery1.Params[2].AsDateTime := Now;
    SQLQuery1.Params[3].AsString := '12345678';
    SQLQuery1.Params[4].AsString := 'Dies ist ein Test';
    SQLQuery1.Params[5].AsInteger := 250;
    SQLQuery1.ExecSQL(False);
    SQLConnect1.Connected := False;
end;

Igotcha 18. Mai 2005 11:41

Re: Probleme bei Insert in Oracle DB (9.2.0)
 
Zitat:

Zitat von PanTau64
Sorry aber ich habe beim kopieren einen Fehler gemacht. Die Zeile mit "Values" ist zweimal reingerutscht. Der "richtige" Code muss sein:

cheers

Code:
Delphi-Quellcode:
********************************************************************* 
    SQLQuery1.Params[2].AsDateTime := Now;
    SQLQuery1.Params[2].AsString := '12345678';

Der Fehler ist aber immer noch drin ;-)

Gruß Igotcha

PanTau64 18. Mai 2005 11:52

Re: Probleme bei Insert in Oracle DB (9.2.0)
 
sorry, ich glaube ich habe jetzt alle Copy-Paste Fehler behoben

Delphi-Quellcode:
********************************************************************* 
procedure TForm1.Button1Click(Sender: TObject);
var
    sSql : String;
    stmtParams: TParams;
begin
    SQLConnect1.Connected := True;
    SQLQuery1.SQL.Clear;
    sSql := '';
    sSql := 'INSERT INTO SCAN_LOG ' + 
            '(DATAMART, CUBE, TRANFORMER_DATE, ' + 
            'CODE, DESCRIPTION, SEQ) ' + 
            'VALUES (:Datamart, :Cube, :Transformer_Date, ' + 
            ':Code, :Description, :SEQ)';
    SQLQuery1.SQL.Add(sSql);
    SQLQuery1.Params[0].AsString := 'FUS';
    SQLQuery1.Params[1].AsString := 'FuS_Behaelter';
    SQLQuery1.Params[2].AsDateTime := Now;
    SQLQuery1.Params[3].AsString := '12345678';
    SQLQuery1.Params[4].AsString := 'Dies ist ein Test';
    SQLQuery1.Params[5].AsInteger := 250;
    SQLQuery1.ExecSQL(False);
    SQLConnect1.Connected := False;
end;
Oracle Table:

CREATE TABLE DWH.SCAN_LOG
(
DATAMART VARCHAR2(255),
CUBE VARCHAR2(255),
TRANFORMER_DATE DATE,
CODE VARCHAR2(255),
DESCRIPTION VARCHAR2(255),
SEQ INT
)

Akut-Programming 18. Mai 2005 12:51

Re: Probleme bei Insert in Oracle DB (9.2.0)
 
Du schreibst "SQLQuery1.Params[2].AsDateTime := Now;" aber in deiner Tabellendeklaration hast dus so "TRANFORMER_DATE DATE" wenn dann mach "TRANFORMER_DATE DATETIME" draus, oder halt andersrum. Könnte das evtl. dein Fehler sein?

PanTau64 18. Mai 2005 12:56

Re: Probleme bei Insert in Oracle DB (9.2.0)
 
Nein, das Datum ist nicht mein Problem. Ich habe eben mit TTable herumexperimentiert und da konnte ich einen Satz mit einem Datum erzeugen. Das Feld "SEQ" macht mir Probleme. Ich weiß nicht, welchen Datentyp ich dort nehmen soll. Ich bekomme immer die gleiche Meldung.

Any idea? :gruebel:

annonyme 18. Mai 2005 13:20

Re: Probleme bei Insert in Oracle DB (9.2.0)
 
Zitat:

Zitat von PanTau64
Oracle Table:

CREATE TABLE DWH.SCAN_LOG
(
DATAMART VARCHAR2(255),
CUBE VARCHAR2(255),
TRANFORMER_DATE DATE,
CODE VARCHAR2(255),
DESCRIPTION VARCHAR2(255),
SEQ INT
)

SEQ NUMBER(3,0) könnte funktionieren

PanTau64 18. Mai 2005 13:26

Re: Probleme bei Insert in Oracle DB (9.2.0)
 
Hab jetzt "SEQ" als NUMBER deklariert und jetzt funzt es, aber komischerweise nur mit TTABLE. :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:25 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