Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi datentypen in kriterienausdruck unverträglich Access (https://www.delphipraxis.net/118135-datentypen-kriterienausdruck-unvertraeglich-access.html)

Butch87 1. Aug 2008 08:49

Datenbank: Access • Version: 2000 • Zugriff über: ADO

datentypen in kriterienausdruck unverträglich Access
 
Ich füge über Insert Datensätze in eine Accesstabelle

->
SQL-Code:
 Insert Into T_Stammdaten
(ZaehlPkt, GueltigAb, KdNr, Anrede, Name, Vorname, Strasse, Hausnummer,
 PLZ, Ort, KdNrNetznutzung, VermittlerID, AbgemeldetAm, Abschlag,
 Telefon)
Values
(:ZaehlPkt, :GueltigAb, :KdNr, :Anrede, :Name, :Vorname, :Strasse,
 :Hausnummer, :PLZ, :Ort, :KdNrNetznutzung, :VermittlerID, :AbgemeldetAm
 , :Abschlag, :Telefon)
Datentypen der Felder in Access
ZaehlPkt = Longint
GueltigAb = Datum/Uhrzeit
KdNr = Text
Anrede = Text
Name = Text
Vorname = Text
Strasse = Text
Hausnummer = Text
PLZ = Text
Ort = Text
KdNrNetznutzung = Text
VermittlerID = Longint
AbgemeldetAm = Datum
Abschlag = Währung
Telefon = Text

Datentypen der Felder in Delphi
Delphi-Quellcode:
FZaehlPktID    : Longint;
FGueltigAb     : TDate;
FKdNrSwFi      : String;
FAnrede        : String;
FName          : String;
FVorname       : String;
FStrasse       : String;
FHausnummer    : String;
FPLZ           : String;
FOrt           : String;
FKdNrNetznutzung: String;
FVermittlerID  : Longint;
FAbgemeldetAm  : TDate;
FAbschlag      : Currency;
FTelefon       : String;

hier weise ich den Paramtern dann ihre werte zu und führe die sql aus
Delphi-Quellcode:
for i:= 0 to FStammList.Count -1 do
  begin
    Stamm:= FStammList.Items[i] as TStamm;
    DModMDB.QInsert.Parameters.ParamValues['ZaehlPkt']:= Stamm.ZaehlPktID;
    DModMDB.QInsert.Parameters.ParamValues['GueltigAb']:= Stamm.GueltigAb;
    DModMDB.QInsert.Parameters.ParamValues['KdNr']:= Stamm.KdNRSwFi;
    DModMDB.QInsert.Parameters.ParamValues['Anrede']:= Stamm.Anrede;
    DModMDB.QInsert.Parameters.ParamValues['Name']:= Stamm.Name;
    DModMDB.QInsert.Parameters.ParamValues['Vorname']:= Stamm.Vorname;
    DModMDB.QInsert.Parameters.ParamValues['Strasse']:= Stamm.Strasse;
    DModMDB.QInsert.Parameters.ParamValues['Hausnummer']:= Stamm.Hausnummer;
    DModMDB.QInsert.Parameters.ParamValues['PLZ']:= Stamm.PLZ;
    DModMDB.QInsert.Parameters.ParamValues['Ort']:= Stamm.Ort;
    DModMDB.QInsert.Parameters.ParamValues['KdNrNetznutzung']:= Stamm.KdNrNetznutzung;
    DModMDB.QInsert.Parameters.ParamValues['VermittlerID']:= Stamm.VermittlerID;
    DModMDB.QInsert.Parameters.ParamValues['AbgemeldetAm']:= Stamm.AbgemeldetAm;
    DModMDB.QInsert.Parameters.ParamValues['Abschlag']:= Stamm.Abschlag;
    DModMDB.QInsert.Parameters.ParamValues['Telefon']:= Stamm.Telefon;
    DModMDB.QInsert.ExecSQL;
  end;
der ersten 3 Datensätze, aus der Objectliste, werden in die Tabelle geschrieben. Bei dem 4. kommt
dann die Fehlermeldung!!
Ich bitte um Hilfe!!!

mkinzler 1. Aug 2008 08:56

Re: datentypen in kriterienausdruck unverträglich Access
 
Delphi-Quellcode:
FGueltigAb     : TDateTime;
Versuch es mal mit

Delphi-Quellcode:
DModMDB.QInsert.Parameters.ParamByName('<Paramter>').Value := ...

Butch87 1. Aug 2008 09:16

Re: datentypen in kriterienausdruck unverträglich Access
 
:-D es funktioniert!! Ich hab jetzt nicht getestet, ob es am datum oder an den Parameternaufrufen lag!!!

:thumb: dankeschön

Butch87 1. Aug 2008 09:29

Re: datentypen in kriterienausdruck unverträglich Access
 
Nochmal ne frage...(ich weiß eigntl nen neuer thread, aber...)

ich belege ja das Datum mit 0 vor!! Dadurch steht in der Tabelle 00:00:00!! Allerdings sollte da gar nichts drinne stehen!! Was muss ich da übergeben, sodass da nichts drinne steht?!

mkinzler 1. Aug 2008 09:32

Re: datentypen in kriterienausdruck unverträglich Access
 
0 bedeutet auch 31.12.1899 00:00:00
der Wert muss NULL sein.

Butch87 1. Aug 2008 09:42

Re: datentypen in kriterienausdruck unverträglich Access
 
Das Funktoniert aber nicht. Wenn ich dem Parameter Null übergebe kommt dies

-> Ein Parameterobjekt ist nicht ordnungsgemäß definiert. Inkonsistente oder unvollständige Informationen wurden angegeben.

mkinzler 1. Aug 2008 10:27

Re: datentypen in kriterienausdruck unverträglich Access
 
Zeig mal wie du es versuchst

Butch87 1. Aug 2008 10:31

Re: datentypen in kriterienausdruck unverträglich Access
 
so:
Delphi-Quellcode:
    if Stamm.AbgemeldetAm <> 0 then
      DModMDB.QInsert.Parameters.ParamByName('AbgemeldetAm').Value:= Stamm.AbgemeldetAm
    else
      DModMDB.QInsert.Parameters.ParamByName('AbgemeldetAm').Value:= Null;

nahpets 1. Aug 2008 10:52

Re: datentypen in kriterienausdruck unverträglich Access
 
Hallo,

das Problem ist, dass Du dort, wo der Parameter auf Null gesetzt wird, dann eben nichts steht. Im Insert-Statement stehen dann zwei ,, .

Hatte das Problem vor Jahren auch mal und bin dann hergegangen und habe den Parameter im SQL durch das Wort NULL ersetzt.
Zugegeben, ist keine schöne Lösung, aber anders habe ich es seinerzeit nicht wegbekommen.
Und mit noch einem Problem musst Du rechnen: Wenn Du einen Leerstring in die Datenbank schreiben musst, hier bin ich hergegangen und habe immer ein Leerzeichen an den String gehangen, der wurde beim Speichern in der Datenbank automatisch wieder weggenommen (keine Ahnung von wem, war auch eine Access-Datenbank), alternativ musst Du bei leeren Strings auch den Parameter durch die Zeichenfolge NULL ersetzen.

Delphi-Quellcode:
var
      sSQL : String;
begin

...

    If Assigned(Query) Then With Query.Parameters Do Begin
      sSQL := Query.SQL.Text;
      If FindParam('ID') <> Nil Then Begin
        ParamByName('ID').Value := FID;
      End;
      If FindParam('Aktenzeichen') <> Nil Then Begin
        ParamByName('Aktenzeichen').Value := FAktenzeichen + ' ';
      End;
      If FindParam('ServicenummerPraefix') <> Nil Then Begin
        ParamByName('ServicenummerPraefix').Value := FServicenummerPraefix;
      End;
      If FindParam('ServicenummerRufnummer') <> Nil Then Begin
        ParamByName('ServicenummerRufnummer').Value := FServicenummerRufnummer + ' ';
      End;
      If FindParam('Datum') <> Nil Then Begin
        If FDatum = 0 Then Begin
          sSQL := AnsiReplaceText(sSQL, ':Datum', 'NULL');
        End Else Begin
          ParamByName('Datum').Value := FDatum;
        End;
      End;

...

      Query.SQL.Text := sSQL;
      Query.ExecSQL;

...

end;
Stephan

Butch87 1. Aug 2008 11:11

Re: datentypen in kriterienausdruck unverträglich Access
 
Wuheyyy Stephan, genau das wars!! Klingt auch ziemlich einleuchtend DANKESCHÖN


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