Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   ADO stolpert über chr(13) chr(10) (https://www.delphipraxis.net/160621-ado-stolpert-ueber-chr-13-chr-10-a.html)

p80286 23. Mai 2011 11:04

Datenbank: oracle • Version: 9 • Zugriff über: ADO

ADO stolpert über chr(13) chr(10)
 
Hallo zusammen
bei folgendem Select
Code:
select feld1,chr(13)||chr(10)||'mein text'||Feld2
from MyData
bekomme ich folgende Fehlermeldung.

Fehler bei einem aus mehreren Schritten bestehenden Vorgang. Prüfen Sie die einzelnen Statuswerte.


so geht's problemlos
Code:
select feld1,'mein text'||Feld2
from MyData
Über ODBC geht es übrigens auch mit chr(13)||chr(10).
wißt Ihr woran sich da der Treiber verschluckt?

Gruß
K-H
P.S. der ADO-Provider kommt von Oracle

Jumpy 23. Mai 2011 11:52

AW: ADO stolpert über chr(13) chr(10)
 
Code:
SELECT
MAN, CHR(13)||CHR(10)||'BLA'||AK AS TEST
FROM
MYTABLE
lief bei mir problemlos (Oracle 9 Client, Oracle 10 DB), sowohl über den Oracle-Provider als auch über den Oracle ODBC Treiber.

Vllt. liegt das Problem woanders? Versuch doch mal irgendein anderes Zeichen:

select feld1,chr(34)||'mein text'||Feld2

jobo 23. Mai 2011 12:08

AW: ADO stolpert über chr(13) chr(10)
 
Du hast vermutlich eine impliziteKonvertierung in Feld2. Das ist vielleicht kein Textfeld.
Damit man über das gleiche redet, läuft das bei Dir?

Code:
-- text field
select dummy, chr(13)||chr(10)||'mein text'||dummy
from dual;
-- text function
select dummy, chr(13)||chr(10)||'mein text'||user
from dual;
-- date function
select dummy, chr(13)||chr(10)||'mein text'||sysdate
from dual;
-- null
select dummy, chr(13)||chr(10)||'mein text'||NULL
from dual;
-- decimal
select dummy, chr(13)||chr(10)||'mein text'||99.82
from dual;
-- integer
select dummy, chr(13)||chr(10)||'mein text'||99
from dual;
-- integer function
select dummy, chr(13)||chr(10)||'mein text'||instr(dummy, 'X')
from dual;

p80286 23. Mai 2011 13:52

AW: ADO stolpert über chr(13) chr(10)
 
zunächst einmal vielen Dank!
sobald ich das
Code:
chr(13)
lösche geht's wieder! (so hab ich mir für's erste geholfen.)

@jobo

Mein Enthusiasmus hält sich in Grenzen, aber jede Deiner Abfragen funktioniert!

Hier mal mein Original (nach mehreren Tests gestrippt) :
Code:
SELECT 'update casename set Namekey=20230734 where CaseKey='||Cases.CaseKey||' and casenamekey='||caseassis.casenamekey||';'||chr(13)||chr(10)
CaseKey und CaseNameKey sind numerisch.

Gruß
K-H

jobo 23. Mai 2011 14:27

AW: ADO stolpert über chr(13) chr(10)
 
dann versuch es doch mit expliziter Konvertierung:

Code:
select dummy, chr(13)||chr(10)||'mein text'||to_char(99)
from dual;
bzw.

Code:
SELECT
  'update casename set Namekey=20230734 '  ||
  ' where CaseKey='||to_char(Cases.CaseKey)'||
  '  and casenamekey='||to_char(caseassis.casenamekey)||';
  '||chr(13)||chr(10)
  from ...

p80286 23. Mai 2011 16:18

AW: ADO stolpert über chr(13) chr(10)
 
ich habe einmal den Debugger angeworfen, es sieht so aus als würde es hier knirschen:
Delphi-Quellcode:
Unit ADODB
....
function PropertyExists(const PropList: ADOInt.Properties; const PropName: WideString): Boolean;
var
  I: Integer;
begin
  for I := PropList.Count - 1  downto 0 do     <<<<<<<<<<<<<<<<<<
    if PropList[I].Name = PropName then
    begin
      Result := True;
      Exit;
    end;
  Result := False;
end;
PropList.count ist 0!
und hier geht's dann weiter
Delphi-Quellcode:
Unit System

function _CheckAutoResult(ResultCode: HResult): HResult;
{$IF Defined(PIC) or Defined(PUREPASCAL)}
begin
  if ResultCode < 0 then
  begin
    if Assigned(SafeCallErrorProc) then
      SafeCallErrorProc(ResultCode, Pointer(-1)); // loses error address
    Error(reSafeCallError);
  end;
  Result := ResultCode;
end;
{$ELSE}
asm
        TEST   EAX,EAX             <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
        JNS    @@2
        MOV    ECX,SafeCallErrorProc
        TEST   ECX,ECX
        JE     @@1
        MOV    EDX,[ESP]
        CALL   ECX
@@1:   MOV    AL,reSafeCallError
        JMP    Error
@@2:
end;
{$IFEND}
Gruß
K-H

Nachtrag:
Ich bin einen halben Schritt weiter gekommen. Es hat wohl etwas mit der Menge der '||' zu tun.
Folgende Abfrage liefert den Fehler
Code:
select 'Insert into casename (CASENAMEKEY,CASEKEY,NAMETYPEKEY,NAMEKEY,ARCHIVED)'||
       ' values (nextkey.nextval,'||cases.casekey||',105,38047483,0);'||' CRLF'
      ,cases.casekey
      ,cases.casereference
      ,cases.CaseTypeKey
      ,SachB.Name,IndSachb.FirstName
      ,Assis.Name
folgende nicht
Code:
select 'Insert into casename (CASENAMEKEY,CASEKEY,NAMETYPEKEY,NAMEKEY,ARCHIVED)',
       ' values (nextkey.nextval,'||cases.casekey||',105,38047483,0);'||' CRLF'
      ,cases.casekey
      ,cases.casereference
      ,cases.CaseTypeKey
      ,SachB.Name,IndSachb.FirstName
      ,Assis.Name

jobo 24. Mai 2011 07:06

AW: ADO stolpert über chr(13) chr(10)
 
Welche Client Version hast Du genau? 9.?.?.?
Was ist mit to_char?

p80286 24. Mai 2011 09:49

AW: ADO stolpert über chr(13) chr(10)
 
@jobo
Es ist die Vers 9.2

Ich hab's raus bekommen,
es liegt an der Stringlänge für den Ausdruck. Sobald diese 125 Zeichen überschreitet kommt diese besch. Fehlermeldung.
Das hier ist die Obergrenze:
Code:
select '0123456789+123456789+123456789+123456789+123456789+123456789+123456789+123456789+123456789+123456789+123456789+123456789+1234'
from Dual;
select '0123456789+123456789+123456789+123456789+123456789+123456789+123456789+123456789+123456789+12345'||to_char(sysdate,'YYYYMMDD')
from Dual;
ein Zeichen mehr und Schluß ist.
Code:
Select 125Byte,125Byte,125Byte from ...
Das wiederum geht.

Vielen Dank!
K-H


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