Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Oracle: Tabelle mit Daten füllen - Fehler beim Datentyp (https://www.delphipraxis.net/22118-oracle-tabelle-mit-daten-fuellen-fehler-beim-datentyp.html)

I_need_help 12. Mai 2004 17:09


Oracle: Tabelle mit Daten füllen - Fehler beim Datentyp
 
Hallöchen zusammen,

ich habe folgendes Problem: Mein Delphi-Programm soll Daten in eine Oracle-Tabelle schreiben. Ich verwende dafür diese Routine:

Delphi-Quellcode:
with MyQuery do begin
            SQL.Clear;
            SQL.Add('insert into '+
                    tablename
                    + ' (TEST_PID,'+
                    ' TEST_NAME,'+
                    ' TEST_VORNAME,'+
                    ' TEST_PLZ,'+
                    ' TEST_ORT,'+
                    ' TEST_GEBDAT,'+
                    'TEST_ZEICHEN)'+
                    ' values ' +
                    '(:i_TEST_PID,'+
                    ':i_TEST_Nachname,'+
                    ':i_TEST_Vorname,'+
                    ':i_TEST_PLZ,'+
                    ':i_TEST_Ort,'+
                    ':i_TEST_GebDat,'+
                    ':i_TEST_ZEICHEN)');

           Prepared := True;
            with Params do
            begin
               ParamByName('i_TEST_PID').AsString := pid;
               ParamByName('i_TEST_Nachname').AsString := nachname;
               ParamByName('i_TEST_Vorname').AsString := vorname;
               ParamByName('i_TEST_PLZ').AsInteger := plz;
               ParamByName('i_TEST_Ort').AsString := ort;
               ParamByName('i_TEST_GebDat').AsString := datum;
               ParamByName('i_TEST_ZEICHEN').AsString := zeichen;

            end; //with params

            ExecSql;

        end; //whith query
Mein Problem ist jetzt, dass beim Ausführen des Programms die Meldung kommt: "dbExpress-Fehler: ungültiger Feldtyp".

In der DB sind
pid, nachname, vorname, ort, datum ein varchar
plz ein number
zeichen ein char

Was hab ich da falsch gemacht??
:?:

Albi 12. Mai 2004 17:55

Re: Oracle: Tabelle mit Daten füllen - Fehler beim Datentyp
 
Liegt es vielleicht an der P_ID, wird die ID auf der DB auch erzeugt?

Einen Tip am Rande. Besser wäre es für die PLZ ein CHAR (5) zu wählen, da bei einem Integer Wert aus der PlZ 01234 eine 1234 wird. Es wird die 0 am Anfang also weggekürzt.

Robert_G 12. Mai 2004 18:19

Re: Oracle: Tabelle mit Daten füllen - Fehler beim Datentyp
 
Dein Code müsste eigentlich funktionieren, solange TEST_GEBDAT kein Datum ist.
Dann müsste es so heißen:
Delphi-Quellcode:
  ParamByName('i_TEST_GebDat').AsDatetime := IrgendeineDatumsVariable;

Falls es immer noch nicht geht: Öffne SQLPlus, tippe einmal "ED" dann Enter. im Notepadfenster einfach das da unten einfügen, speichern und schließen.
Du landest jetzt wieder in der Kommandozeile, dort reicht ein "/" um es auszuführen.

SQL-Code:
Declare
  pid      Varchar2(20) := '123';
  nachname Varchar2(20) := 'eene';
  vorname  Varchar2(20) := 'meene';
  plz      Varchar2(20) := 'muh';
  ort      Varchar2(20) := '123';
  datum    Date        := to_Date('01012000', 'DDMMYYYY');
  zeichen  Varchar2(20) := '123';
  TableName Varchar2(32) := 'DeinTabellenName';
Begin
  Execute Immediate 'INSERT INTO ' || TableName || chr(10) ||
                    ' (TEST_PID' || chr(10) ||
                    ' ,TEST_NAME' || chr(10) ||
                    ' ,TEST_VORNAME' || chr(10) ||
                    ' ,TEST_PLZ' || chr(10) ||
                    ' ,TEST_ORT' || chr(10) ||
                    ' ,TEST_GEBDAT' || chr(10) ||
                    ' ,TEST_ZEICHEN)' || chr(10) ||
                    'VALUES' || chr(10) ||
                    ' (:i_TEST_PID' || chr(10) ||
                    ' ,:i_TEST_Nachname' || chr(10) ||
                    ' ,:i_TEST_Vorname' || chr(10) ||
                    ' ,:i_TEST_PLZ' || chr(10) || 
                    ' ,:i_TEST_Ort' || chr(10) || 
                    ' ,:i_TEST_GebDat' || chr(10) ||
                    ' ,:i_TEST_ZEICHEN)'
    Using pid, nachname, vorname, plz, ort, datum, zeichen;
End;
Das ist dein Code da oben in PL/SQL, wenn das geht, dann bocken deine Einstellungen für die DB-Kompos. ;)

I_need_help 13. Mai 2004 12:19

Re: Oracle: Tabelle mit Daten füllen - Fehler beim Datentyp
 
hi Robert_G,

ich hab es mit pl/sql ausprobiert und es lief!! ja super, das heißt jetzt, dass bei meinen delphi-einstellungen etwas nicht so dolle ist???

ich hatte letzte woche delphi 8 mit drauf, hab es dann aber deinstalliert und delphi 7 nicht neu installiert. kann es sein, dass da was verloren gegangen ist??

Robert_G 13. Mai 2004 15:12

Re: Oracle: Tabelle mit Daten füllen - Fehler beim Datentyp
 
Wenn sich Delphi (Win32) & Oracle treffen gehört auch DOA dazu.
Unter Downloads kannst du eine volle Trial saugen und ausprobieren -> du wirst nie wieder anders auf eine DB zugreifen wollen ;)

Zu deinem DBExpress-Problem: D8 hat eine Weiterentwicklung von DBExpress dabei, hast du die beim Deinstallieren auch gelöscht, dürfte dein altes DBXpress ziemlich zerpflückt sein.

I_need_help 13. Mai 2004 16:22

Re: Oracle: Tabelle mit Daten füllen - Fehler beim Datentyp
 
thanks erst mal, ich probier es mal mit ner neuinstallation des d7, wenn es danach nicht läuft... dann schaun mer mal.

I_need_help 17. Mai 2004 14:43

Re: Oracle: Tabelle mit Daten füllen - Fehler beim Datentyp
 
Hallöchen, da bin ich wieder,

so, nun habe ich d7 komplett deinstalliert und neuinstalliert und habe mir gleich ein anderes problem geschaffen: der compiler meldet nämlich folgendes:

[Fataler Fehler] DatenInDB.pas(7): Unit SqlExpr wurde mit einer unterschiedlichen Version von SqlConst.SNOERROR compiliert

was nun??? :wall:

Alfons_G 18. Mai 2004 10:29

Re: Oracle: Tabelle mit Daten füllen - Fehler beim Datentyp
 
Hast Du wirklich Dein D7 komplett entsorgt, bevor Du es neu installiert hast? Normalerweise kommt dieser Fehler ja dann, wenn man Dateien aus unterschiedlichen Versionen (Updates usw.) miteinander verwendet.

Ich hatte übrigens die allerbesten Erfahrungen mit dem Zugriff auf Oracle mit ODAC. Die Komponenten gibt es als Testversion zum Download. Der Kaufpreis liegt zwischen 90 und 300 Euro, je nach Version. Mit der Lizenz ist man für alle verfügbaren Delphi-Versionen ausgerüstet.
Am besten ist die NET-Variante (hat nix mit DotNET zu tun ;) ). Damit schreibt mann Anwendungen, bei denen der User keinen Oracle-Client benötigt. Man trägt (über ein Installationsprogramm, INI-Datei usw.) die IP-Adresse, sowie den Datenbanknamen des Servers ein und fertig.

:coder:

I_need_help 18. Mai 2004 13:48

Re: Oracle: Tabelle mit Daten füllen - Fehler beim Datentyp
 
ich hatte direkt ein update mit installiert. das hab ich bei der letzten installation mal weggelassen und das programm lief wieder. erst hat es was rumgebockt, so von wegen fehlermeldungen beim starten von delphi, aber jetzt ist alles okay soweit.

die daten in die db kriege ich jetzt auch, ich lass einfach die parametergeschichte weg und mache ein einfaches insert - und es läuft. wahnsinn.

danke nochmal an alle :-D

Robert_G 18. Mai 2004 15:32

Re: Oracle: Tabelle mit Daten füllen - Fehler beim Datentyp
 
Zitat:

die daten in die db kriege ich jetzt auch, ich lass einfach die parametergeschichte weg und mache ein einfaches insert - und es läuft. wahnsinn
:wiejetzt:

Wenn das nicht geht, dann machst du ganz einfach etwas falsch. Bastelst du dir aus Stringstücken irgendwelche Statements zusammen machst du es sowieso falsch. ;)
Also schaue dir genau an, ob du zum Bleistift bei einem Datumsparameter in DBExpress, diesen Parameter als DateTime/Date deklarieren musst (ich mache das immer).


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:13 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 by Thomas Breitkreuz