Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Sonderzeichen ( z.b. " ' ) auslesen und schreiben (https://www.delphipraxis.net/88217-sonderzeichen-z-b-auslesen-und-schreiben.html)

Real_Thunder 12. Mär 2007 00:31

Datenbank: ACCESS • Version: 2002 SP1 • Zugriff über: ADO Ms Jet 4.0

Sonderzeichen ( z.b. " ' ) auslesen und schreiben
 
Moin erstmal von mir

Ich stehe vor der Aufgabe mit hilfe eines Delphi Programmes mehrere Datenbanken / Tabellen auszulesen,
und diese zu einer zusammenzufügen..
ok das auslesen hat soweit geklappt...
Nur wenn ich eine Neue Tabelle schreiben will, und in einem
der ausgelesenen Felder ein Sonderzeichen vorkommt wie z.b. ' oder " bzw ( etc...
dann bekomme ich eine ole exeption....

Das mein einfügedtring falsch sei...
erscheint mir an sich auch loisch... das er mit den hochkommas etc nciht mehr ganz passt..
also nun meine frage... wie kann ich die sonderzeichen abändern um string, so das sie von der Accessdatenbank bzw ADO
angeommen werden.

Ich füge die daten volgenermaßen ein:
Delphi-Quellcode:
  memo1.Lines.Add('Erstelle Tabelle (Personen)');
  NeuDbCon.connected:=true;
  NeuDbQuery.SQL.Text:='CREATE TABLE pers59 ('+
                       'id varchar(8) , '+
                       'altid varchar(8) PRIMARY KEY,'+
                       'geschlecht varchar(1),'+
                       'anrede varchar(40),'+
                       'Nachname varchar(50), '+
                       'Vorname varchar(50), '+
                       'strasse varchar(90), '+
                       'plz varchar(10), '+
                       'ort varchar(55), '+
                       'tel varchar(20), '+
                       'tel2 varchar(20), '+
                       'fax varchar(20), '+
                       'email varchar(60), '+
                       'bemerkung text, '+
                       'erstellt varchar(10), '+
                       'modify varchar(10), '+
                       'sterntaler bit, '+
                       'patenschaft bit, '+
                       'kastration bit, '+
                       'kostrin bit'+
                       ')';
   NeuDbQuery.ExecSQL;
währe nett wenn ich eine antwort bekommen könnten.

MfG
Real Thunder

marabu 12. Mär 2007 06:29

Re: Sonderzeichen ( z.b. " ' ) auslesen und schreiben
 
Guten Morgen.

Wenn du die Daten mit einer Variation von

SQL-Code:
INSERT INTO neu SELECT * FROM alt1
übernimmst, dann kümmern dich Sonderzeichen nicht. Versuchst du die Sätze einzeln per INSERT zu übernehmen, dann kannst du die Feldwerte per Eigenschaft "Parameter" setzen und auch dann ist dir egal, welche Zeichen vorkommen. Nur wenn du das INSERT Statement aus Strings zusammensetzt musst du die Feldwerte mit QuotedStr() vorbehandeln.

Grüße vom marabu

Real_Thunder 12. Mär 2007 08:44

Re: Sonderzeichen ( z.b. " ' ) auslesen und schreiben
 
Ich kann die werde nicht gleich wieder in neu andere tabelle schreiben, weil sie vorher ersteineinmal vom programm analysiert werden...
das mit dem QuoteStr klapt irgendi auch nicht....

ich .. ich schriebe die datn folgenermaßen in die datenbank:
Delphi-Quellcode:
 NeuDbQuery.SQL.Text:='INSERT INTO [pers59] ('+
                       'id, altid, geschlecht, anrede, Nachname, Vorname, strasse, plz, ort, tel, '+
                       'tel2, fax, email, bemerkung, erstellt, modify, sterntaler, '+
                       'patenschaft, kastration, kostrin'+

                       ') VALUES ('+

                       '"'+getid+'", '+
                       '"'+NeuDbRec_Pers_Array[a].ID      + '", '+
                       '"'+NeuDbRec_Pers_Array[a].gesch   + '", '+
                       '"'+NeuDbRec_Pers_Array[a].Anrede  + '", '+
                       '"'+NeuDbRec_Pers_Array[a].Nname   + '", '+
                       '"'+NeuDbRec_Pers_Array[a].vname   + '", '+
                       '"'+NeuDbRec_Pers_Array[a].strasse + '", '+
                       '"'+NeuDbRec_Pers_Array[a].plz     + '", '+
                       '"'+NeuDbRec_Pers_Array[a].ort     + '", '+
                       '"'+NeuDbRec_Pers_Array[a].tel     + '", '+
                       '"'+NeuDbRec_Pers_Array[a].tel2     + '", '+
                       '"'+NeuDbRec_Pers_Array[a].fax     + '", '+
                       '"'NeuDbRec_Pers_Array[a].email    + '", '+
                       '"'NeuDbRec_Pers_Array[a].bemerkung + '", '+
                       '"'+NeuDbRec_Pers_Array[a].datum   + '", '+
                       '"'+NeuDbRec_Pers_Array[a].modify  + '", '+
                       'false, '+
                       'false, '+
                       'false, '+
                       'false'+
                       ')';
 NeuDbQuery.ExecSQL;
Und sobald ein wert kommt der " oder ' enthält, schmeißt er mir ne ole exeption an den kopf

marabu 12. Mär 2007 08:55

Re: Sonderzeichen ( z.b. " ' ) auslesen und schreiben
 
In deinem Code setzt du aber die Hinweise gar nicht um.

Entweder so:

Delphi-Quellcode:
NeuDbQuery.SQL.Text := 'INSERT INTO [pers59] ('
  + 'id, altid, geschlecht, anrede, Nachname, Vorname, strasse, plz, ort, tel, '
  + 'tel2, fax, email, bemerkung, erstellt, modify, sterntaler, '
  + 'patenschaft, kastration, kostrin'
  + ') VALUES ('
  + QuotedStr(getid) + ', '
  + QuotedStr(NeuDbRec_Pers_Array[a].ID) + ', '
  + ...
Oder so:

Delphi-Quellcode:
with NeuDbQuery do
  SQL.Text := 'INSERT INTO [pers59] ('
            + 'id, altid, geschlecht, anrede, Nachname, Vorname, strasse, plz, ort, tel, '
            + 'tel2, fax, email, bemerkung, erstellt, modify, sterntaler, '
            + 'patenschaft, kastration, kostrin'
            + ') VALUES ('
            + ':id, :altid, ....';
  Parameters.ParamValues['ID'] := GetId;
  ...
end;
Freundliche Grüße

Real_Thunder 15. Mär 2007 14:33

Re: Sonderzeichen ( z.b. " ' ) auslesen und schreiben
 
Ich habe es versucht so umzusetzten... kamm allerdings eine andere execption..

Zitat:

Erste Zufalls-Exception bei $7C812A5B. Exception-Klasse EOleException mit Meldung 'Ein Parameterobjekt ist nicht ordnungsgemäß definiert. Inkonsistente oder unvollständige Informationen wurden angegeben'. Prozess PA_Datentrans.exe (1864)
Und was das nun wieder zu bedeuten hat, weiß ich auch nicht...
Langsam drehe ich hier durch.... :wall:

Phoenix 15. Mär 2007 14:36

Re: Sonderzeichen ( z.b. " ' ) auslesen und schreiben
 
Steht doch da im Exceptiontext: Du hast den Parameter nicht komplett definiert.
Was an der Exception ist denn nicht verständlich?

Real_Thunder 15. Mär 2007 15:19

Re: Sonderzeichen ( z.b. " ' ) auslesen und schreiben
 
Dies ist der SQL String wie er Angelegt wird wenn ich Qouted bnutze:
Da gibt er mir beim ersten Insert die Exeption:

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

SQL-Code:
INSERT INTO [pers59]
   (id, altid, geschlecht, anrede, Nachname, Vorname, strasse, plz, ort, tel, tel2, fax,
    email,bemerkung, erstellt, modify, sterntaler, patenschaft, kastration, kostrin)
VALUES
   ("0000", "p_1", "w", "Frau", "xxxxxxxx", "Annemarie", "xxxxxxxxx", "82319", "Starnberg", "", "", "", "",
"'Psotka gest. 9.7.02, Patenschaft gilt über Vermittlung u. Tod hinaus, bish. Patenhunde: Amerigo (verm), Mascotte (verm), Psotka gestorben'", "1111111111", "", false, false, false, false)

Und wenn ich es ohne Qouted versuche, läuft er durch bis zu einer zeile in dem im Bemerkungsfeld ein " auftaucht.

her sieht der sqlstring dann so aus:

SQL-Code:
INSERT INTO [pers59] (id, altid, geschlecht, anrede, Nachname, Vorname, strasse, plz, ort, tel, tel2, fax, email, bemerkung, erstellt, modify, sterntaler, patenschaft, kastration, kostrin) VALUES ("0178", "p_139", "w", "Frau", "xxxxx", "Sissy", "xxxxxxxx", "72275", "xxxxxxxxxxx", "xxxxx", "", "", "", "Vertrag gilt "immer",, bish. Patenhunde: Cevdet (verm.)", "", "", false, false, false, false)
beim 2. stimmt der sqlstring ja nicht, da die Anführungszeichen ja eigendlich das ende eines eintages bekonnatgeben...
also muß ich dieses feld irgendwie escapen.. allerdings habe ich keine ahnung wie...

Edit:
Ich habe nun das '"' durch ein '''' ersetzt... nun geht es soweit, bis halt ein ' im bemerlungsfeld steht...
und wie gehabt beim QoutedStr, gibt er mit gleich bei der ersten zeile eine eception

hoika 15. Mär 2007 15:31

Re: Sonderzeichen ( z.b. " ' ) auslesen und schreiben
 
Hallo,

benutze prinzipiell Parameter.

Delphi-Quellcode:
with Query do
begin
  SQL.clear;
  SQL.add('INSERT INTO [pers59] (id, altid, geschlecht, anrede')
  SQL.Add('Values(:Id,:altid,:geschlecht,:anrede);

  ParamByName('Id').AsInteger:= 100;
  ParamByName('altid').AsInteger:= 1;
  ParamByName('geschlecht').AsString:= 'M';
  ParamByName('anrede').AsString:= 'bla';

  ExecSQL;
end;

Heiko

Real_Thunder 15. Mär 2007 16:41

Re: Sonderzeichen ( z.b. " ' ) auslesen und schreiben
 
:thumb:
Hat schien so als wenn etwas mit meinem Jet ODBC treiber nicht in ordnung war... habe ihn neu raufgespielt und non hats funktioniert mit dem quotedstr....

das mit den params schaue ich mir aber auch noch mal genauer an... falls wieder soetwas sein sollte....

Vielen dank fpr die Hilfe...

Mfg Real Thunder


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