Hallo,
ich habe folgende Fehlersituation:
************************************************** ********************************************<br>
Dynamic SQL Error<br>
SQL error code = -804<br>
SQLDA missing or incorrect version, or incorrect number/type of variables<br>
************************************************** ********************************************<br>
************************************************** ********************************************<br>
Auf dem Server läuft hierbei folgende stored procedure ab:<br>
<br>
CREATE PROCEDURE CREATENEWWORD (<br>
INWORD VARCHAR(200),<br>
INWORDTYPE INTEGER<br>
) RETURNS (<br>
OUTWORDID INTEGER,<br>
OUTWORDTYPE INTEGER<br>
) AS <br>
DECLARE VARIABLE ilID INTEGER;<br>
DECLARE VARIABLE ilWordType INTEGER;<br>
BEGIN<br>
SELECT ID, WORDTYPE FROM WORD WHERE TEXT = :inWord INTO :ilID, :ilWORDTYPE;<br>
IF (:ilID IS NULL) THEN<br>
BEGIN<br>
ilID = gen_id( genid, 1 );<br>
INSERT INTO WORD (ID,TEXT,WORDTYPE) VALUES (:ilID, :inWord, :inWordType);<br>
outWordID = ilID;<br>
outWordType = inWordType; <br>
END<br>
ELSE<br>
BEGIN<br>
IF ( inWordType = 0 AND ilWordType <> 0 ) THEN<br>
BEGIN<br>
UPDATE WORD SET TEXT = :inWord WHERE ID = :ilID;<br>
outWordType = ilWordType; <br>
END ELSE<br>
BEGIN<br>
UPDATE WORD SET WORDTYPE = :inWordType, TEXT = :inWord WHERE ID = :ilID;<br>
outWordType = inWordType; <br>
END<br>
outWordID = ilID;<br>
END<br>
END<br>
************************************************** ********************************************<br>
Der Fehler tritt beim Aufruf der Methode spCreateWord.Excute auf:<br>
procedure TNoamDMDocument.saveDocumentWord( ThreadId : Integer; Document : TNoamDocument );<br>
var<br>
Counter : TNoamCounter;<br>
i : Integer;<br>
cParams : TParams;<br>
begin<br>
try<br>
cParams := TParams.Create;<br>
cParams.Assign( spCreateWord.Params );<br>
for i := 0 to Document.Words.Count - 1 do<br>
begin<br>
ThreadForm.progressThreadMessage( ThreadId, 0, Document.Words.Count, i );<br>
Counter := TNoamCounter( Document.Words.Items[i] );<br>
if Length( Counter.Word.Text ) > 0 then<br>
begin<br>
spCreateWord.Params.ParamByName( 'inWORD' ).Value := Counter.Word.Text;<br>
spCreateWord.Params.ParamByName( 'inWORDTYPE' ).Value := Counter.Word.WordType;<br>
<br>
spCreateWord.Execute;<br>
<br>
Counter.Word.Id := spCreateWord.Params.ParamByName('OUTWORDID').Value ;<br>
Counter.Word.WordType := spCreateWord.Params.ParamByName('OUTWORDTYPE').Val ue;<br>
<br>
spCreateWord.Params.Clear;<br>
spCreateWord.Params.Assign( cParams );<br>
<br>
spCreateDocumentWord.Params.ParamByName( 'inDocument' ).AsInteger := Document.Id;<br>
spCreateDocumentWord.Params.ParamByName( 'inWord' ).AsInteger := Counter.Word.Id;<br>
spCreateDocumentWord.Params.ParamByName( 'inCounter' ).AsInteger := Counter.Counter;<br>
spCreateDocumentWord.Execute;<br>
<br>
saveWordLeftNeighbour( ThreadId, Counter.Word );<br>
saveWordContext( ThreadId, Counter.Word );<br>
end;<br>
end;<br>
except<br>
on e : Exception do MessageDlg( e.Message, mtError, [mbOK], 0 );<br>
end;<br>
end;<br>
************************************************** ********************************************<br>
<br>
Das merkwürdige ist, dass die procedure mehrmals fehlerfrei durchlaufen wird. In der Regel ca. 10x. Komisch ist auch, dass der Fehler nicht von irgendwelchen übergebenen Daten abhängig ist. Läuft die Anwendung innerhalb des Delphi-Debuggers,
ich habe folgende Fehlersituation:
************************************************** ********************************************<br>
Dynamic SQL Error<br>
SQL error code = -804<br>
SQLDA missing or incorrect version, or incorrect number/type of variables<br>
************************************************** ********************************************<br>
************************************************** ********************************************<br>
Auf dem Server läuft hierbei folgende stored procedure ab:<br>
<br>
CREATE PROCEDURE CREATENEWWORD (<br>
INWORD VARCHAR(200),<br>
INWORDTYPE INTEGER<br>
) RETURNS (<br>
OUTWORDID INTEGER,<br>
OUTWORDTYPE INTEGER<br>
) AS <br>
DECLARE VARIABLE ilID INTEGER;<br>
DECLARE VARIABLE ilWordType INTEGER;<br>
BEGIN<br>
SELECT ID, WORDTYPE FROM WORD WHERE TEXT = :inWord INTO :ilID, :ilWORDTYPE;<br>
IF (:ilID IS NULL) THEN<br>
BEGIN<br>
ilID = gen_id( genid, 1 );<br>
INSERT INTO WORD (ID,TEXT,WORDTYPE) VALUES (:ilID, :inWord, :inWordType);<br>
outWordID = ilID;<br>
outWordType = inWordType; <br>
END<br>
ELSE<br>
BEGIN<br>
IF ( inWordType = 0 AND ilWordType <> 0 ) THEN<br>
BEGIN<br>
UPDATE WORD SET TEXT = :inWord WHERE ID = :ilID;<br>
outWordType = ilWordType; <br>
END ELSE<br>
BEGIN<br>
UPDATE WORD SET WORDTYPE = :inWordType, TEXT = :inWord WHERE ID = :ilID;<br>
outWordType = inWordType; <br>
END<br>
outWordID = ilID;<br>
END<br>
END<br>
************************************************** ********************************************<br>
Der Fehler tritt beim Aufruf der Methode spCreateWord.Excute auf:<br>
procedure TNoamDMDocument.saveDocumentWord( ThreadId : Integer; Document : TNoamDocument );<br>
var<br>
Counter : TNoamCounter;<br>
i : Integer;<br>
cParams : TParams;<br>
begin<br>
try<br>
cParams := TParams.Create;<br>
cParams.Assign( spCreateWord.Params );<br>
for i := 0 to Document.Words.Count - 1 do<br>
begin<br>
ThreadForm.progressThreadMessage( ThreadId, 0, Document.Words.Count, i );<br>
Counter := TNoamCounter( Document.Words.Items[i] );<br>
if Length( Counter.Word.Text ) > 0 then<br>
begin<br>
spCreateWord.Params.ParamByName( 'inWORD' ).Value := Counter.Word.Text;<br>
spCreateWord.Params.ParamByName( 'inWORDTYPE' ).Value := Counter.Word.WordType;<br>
<br>
spCreateWord.Execute;<br>
<br>
Counter.Word.Id := spCreateWord.Params.ParamByName('OUTWORDID').Value ;<br>
Counter.Word.WordType := spCreateWord.Params.ParamByName('OUTWORDTYPE').Val ue;<br>
<br>
spCreateWord.Params.Clear;<br>
spCreateWord.Params.Assign( cParams );<br>
<br>
spCreateDocumentWord.Params.ParamByName( 'inDocument' ).AsInteger := Document.Id;<br>
spCreateDocumentWord.Params.ParamByName( 'inWord' ).AsInteger := Counter.Word.Id;<br>
spCreateDocumentWord.Params.ParamByName( 'inCounter' ).AsInteger := Counter.Counter;<br>
spCreateDocumentWord.Execute;<br>
<br>
saveWordLeftNeighbour( ThreadId, Counter.Word );<br>
saveWordContext( ThreadId, Counter.Word );<br>
end;<br>
end;<br>
except<br>
on e : Exception do MessageDlg( e.Message, mtError, [mbOK], 0 );<br>
end;<br>
end;<br>
************************************************** ********************************************<br>
<br>
Das merkwürdige ist, dass die procedure mehrmals fehlerfrei durchlaufen wird. In der Regel ca. 10x. Komisch ist auch, dass der Fehler nicht von irgendwelchen übergebenen Daten abhängig ist. Läuft die Anwendung innerhalb des Delphi-Debuggers,
Comment