When I try to insert row into table using ADO Recordset I receive message
"[SAP AG][SQLOD32 DLL]Wrong number of parameters."
Could you tell me what is wrong?

I use following Delphi procedure:

----------------------------------------------
procedure TForm1.StartButtonClick(Sender: TObject);
var
        Conn    : Connection;
        Rs              : Recordset;
        Fields  : OleVariant;
        Values  : OleVariant;
        Query   : String;
        RecordsAffected : OleVariant;
begin
        Conn := CoConnection.Create;
        Conn.CommandTimeout := 2400;
        Conn.Open('Provider=MSDASQL;DSN=Kr_MHF_SAP', 'admin', 'pwd', 0);

        Query:='SELECT * FROM Dictionary WHERE Dic_Name=''DICT_CARD''';
        Rs := CoRecordset.Create;
        Rs.CursorLocation := adUseServer;
        Rs.Open(Query, Conn, adOpenDynamic, adLockOptimistic, adCmdText);
        if Rs.EOF then
        begin
                Fields := VarArrayCreate([0, 3], varVariant);
                Values := VarArrayCreate([0, 3], varVariant);
                Fields[0] := 'Dic_Name';
                Values[0] := 'DICT_CARD';
                Fields[1] := 'Dic_Caption';
                Values[1] := 'DICT_CARD';
                Fields[2] := 'Dic_Version';
                Values[2] := 0;
                Fields[3] := 'Dic_Content';
                Values[3] := 'DESCRIPTION';
                Rs.AddNew(Fields, Values);
        end;
        Rs.Close;
        Rs := nil;
        Conn.Close;
        Conn := nil;
end;
----------------------------------------------

But when I use this procedure, everything is fine:

----------------------------------------------
procedure TForm1.StartButtonClick(Sender: TObject);
var
        Conn    : Connection;
        Fields  : OleVariant;
        Values  : OleVariant;
        Query   : String;
        RecordsAffected : OleVariant;
begin
        Conn := CoConnection.Create;
        Conn.CommandTimeout := 2400;
        Conn.Open('Provider=MSDASQL;DSN=Kr_MHF_SAP', 'admin', 'pwd', 0);

        Query := 'INSERT INTO Dictionary (Dic_Name, Dic_Caption, Dic_Version,
Dic_Content) VALUES (''DICT_CARD'', ''DICT_CARD'', 0, ''DESCRIPTION'')';
        Conn.Execute(Query, RecordsAffected, adCmdText);

        Conn.Close;
        Conn := nil;
end;
----------------------------------------------

Table definition is:
CREATE TABLE "ADMIN"."DICTIONARY"
(
        "DIC_ID"               Integer    DEFAULT  SERIAL (1),
        "DIC_NAME"               Varchar (50) ASCII    NOT NULL    UNIQUE,
        "DIC_CONTENT"               Long ASCII,
        "DIC_VERSION"               Integer    NOT NULL,
        "DIC_CAPTION"               Varchar (255) ASCII,
        "DIC_PATHSEPARATOR"               Varchar (10) ASCII,
        "DIC_CONFIG"               Long ASCII,
        PRIMARY KEY ("DIC_ID")
)

_______________________________________________
sapdb.general mailing list
[EMAIL PROTECTED]
http://listserv.sap.com/mailman/listinfo/sapdb.general

Reply via email to