AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken ADO stolpert über chr(13) chr(10)
Thema durchsuchen
Ansicht
Themen-Optionen

ADO stolpert über chr(13) chr(10)

Ein Thema von p80286 · begonnen am 23. Mai 2011 · letzter Beitrag vom 24. Mai 2011
Antwort Antwort
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#1

ADO stolpert über chr(13) chr(10)

  Alt 23. Mai 2011, 11:04
Datenbank: oracle • Version: 9 • Zugriff über: ADO
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 (23. Mai 2011 um 11:37 Uhr)
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#2

AW: ADO stolpert über chr(13) chr(10)

  Alt 23. Mai 2011, 11:52
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
Ralph
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#3

AW: ADO stolpert über chr(13) chr(10)

  Alt 23. Mai 2011, 12:08
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;
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: ADO stolpert über chr(13) chr(10)

  Alt 23. Mai 2011, 13:52
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#5

AW: ADO stolpert über chr(13) chr(10)

  Alt 23. Mai 2011, 14:27
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 ...
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: ADO stolpert über chr(13) chr(10)

  Alt 23. Mai 2011, 16:18
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 (23. Mai 2011 um 17:17 Uhr)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#7

AW: ADO stolpert über chr(13) chr(10)

  Alt 24. Mai 2011, 07:06
Welche Client Version hast Du genau? 9.?.?.?
Was ist mit to_char?
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

AW: ADO stolpert über chr(13) chr(10)

  Alt 24. Mai 2011, 09:49
@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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:42 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