Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   BDE und Params (https://www.delphipraxis.net/152825-bde-und-params.html)

AThurm 8. Jul 2010 11:09

Datenbank: MSSQL • Version: 5.111 • Zugriff über: BDE

BDE und Params
 
Hallo,
bevor jetzt die ganzen Aussagen kommen das die BDE böse und veraltet ist: Ich habe keine andere Wahl in meiner Firma.
Nun ist es so dass ich folgendes in Delphi 2010 versuche und er mir in der Datenbank-Tabelle aus der hifanr ein 0 anstatt ein NULL macht.
Ändere ich die markierte Stelle auf .AsAnsiString, schreibt er mir die richtigen Daten in die Datenbank (Wert mit NULL).

Ist dies ein Fehler? oder liegt es einfach daran das die BDE kein Unicode unterstützt und er mir die Params im Speicher versaut?

Delphi-Quellcode:
Query1.SQL.Text := 'insert into test ' +
                    '(lnr, hifanr, region) values ' +
                    '(:lnr, :hifanr, :region)';

  Query1.ParamByName('lnr').Name := 'lnr';
  Query1.ParamByName('lnr').DataType := ftInteger;
  Query1.ParamByName('lnr').Value := 999;

  Query1.ParamByName('hifanr').Name := 'hifanr';
  Query1.ParamByName('hifanr').DataType := ftInteger;
  Query1.ParamByName('hifanr').Clear;
  Query1.ParamByName('hifanr').Bound := true;

  Query1.ParamByName('region').DataType := ftString;
  Query1.ParamByName('region').Name := 'region';
  Query1.ParamByName('region').AsString := ''; //.AsAnsiString := '';

  Query1.ExecSQL;

mkinzler 8. Jul 2010 11:14

AW: BDE und Params
 
Ja die BDE kennt kein Unicode. Aber das mit 0 und NULL ist ein anderes Problem. Kannst du das irgendwo konfigurieren?

AThurm 8. Jul 2010 11:44

AW: BDE und Params
 
Der Test bezieht sich auf die gleichen Alias Einstellungen, daher glaube ich nicht das ein Konfigurationsproblem ist.
Ansonsten konnte ich mal etwas von LANGDRIVER = ascii lesen, allerdings hilft das bei diesem Problem auch nicht weiter.

mkinzler 8. Jul 2010 11:45

AW: BDE und Params
 
Nein irgendwo wird ja das 0 als NULL interpretiert

AThurm 8. Jul 2010 11:47

AW: BDE und Params
 
Ich verstehe nicht worauf du hinaus willst ? DAS ist das ganze Programm, auf dem Forumlar liegt nur der TQuery und der Button.
Ich vermute einfach das die DBTables.pas (BDE) nicht mit dem Unicode string umgehen kann ?

mkinzler 8. Jul 2010 11:49

AW: BDE und Params
 
Für Integer gibt es keinen Unicode.
Das Problem ist mir voin anderen Zugriffskomponenten bekannt, bei denen man Einstellen kann wie 0 interptiert wird

ibp 8. Jul 2010 11:59

AW: BDE und Params
 
Zitat:

Zitat von AThurm (Beitrag 1034229)
Hallo,
Delphi-Quellcode:
Query1.SQL.Text := 'insert into test ' +
                    '(lnr, hifanr, region) values ' +
                    '(:lnr, :hifanr, :region)';

  Query1.ParamByName('lnr').Name := 'lnr';
  Query1.ParamByName('lnr').DataType := ftInteger;
  Query1.ParamByName('lnr').Value := 999;

  Query1.ParamByName('hifanr').Name := 'hifanr';
  Query1.ParamByName('hifanr').DataType := ftInteger;
  Query1.ParamByName('hifanr').Clear;
  Query1.ParamByName('hifanr').Bound := true;

  Query1.ParamByName('region').DataType := ftString;
  Query1.ParamByName('region').Name := 'region';
  Query1.ParamByName('region').AsString := ''; //.AsAnsiString := '';

  Query1.ExecSQL;

versuch es mal so....

Delphi-Quellcode:
Query1.SQL.Text := 'insert into test ' +
                    '(lnr, region) values ' +
                    '(:lnr, :region)';

  Query1.ParamByName('lnr').AsInteger = 999;
  //Query1.ParamByName('hifanr').AsInteger = 999;
  Query1.ParamByName('region').AsString := '';
  Query1.ExecSQL;
oder so..

Delphi-Quellcode:
Query1.SQL.Text := 'insert into test ' +
                    '(lnr, hifanr, region) values ' +
                    '(:lnr, NULL, :region)';

  Query1.ParamByName('lnr').AsInteger = 999;
  Query1.ParamByName('region').AsString := '';
  Query1.ExecSQL;
zur not kannst du den SQL-Text mit StringRepalce :hifanr auf NULL setzen...

AThurm 8. Jul 2010 12:08

AW: BDE und Params
 
Danke, beides funktioniert, allerdings hast du damit ja bewusst meinen Parameter gekillt.
Bei uns im Programm gibt es davon aber leider 100 derartige Konstellationen. :)

Bernhard Geyer 8. Jul 2010 12:29

AW: BDE und Params
 
Zitat:

Zitat von AThurm (Beitrag 1034229)
Hallo,
bevor jetzt die ganzen Aussagen kommen das die BDE böse und veraltet ist: Ich habe keine andere Wahl in meiner Firma.

Trotzdem eine Rückfrage: Wieso hast du keine Wahl? Die BDE lässt sich nur mit Tricks unter 64-Bit installieren, Die BDE kann keine neuen Datentypen die der MS-SQL Server seit der letzten 13 Jahren eingeführt hat.

Im Gegensatz hast du mit der ADO-Schnittstelle (was ja mit dbGo verwendet wird) einen Zugriffsweg der seit W2K keine installation benötigt. Du kannst deine Exe also einfach auf dem Ziel-PC kopieren und der DB-Zugriff (wenn der Server erreichbar ist) funktioniert.

Ach ja: Sind deine String-Felder eigentlich vom Typ (var)char oder n(var)char?

AThurm 8. Jul 2010 12:44

AW: BDE und Params
 
Zitat:

Ach ja: Sind deine String-Felder eigentlich vom Typ (var)char oder n(var)char?
vom typ varchar wieso?


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:22 Uhr.
Seite 1 von 2  1 2      

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