关于tuxedo8.1连接oracle9i是,客户端是bcb写的!调用后返回是一长串乱码!没有显示要执行的select结果!
服务器端的程序如下
#include <stdio.h>
#include <atmi.h>
#include <userlog.h>
EXEC SQL INCLUDE sqlca ;EXEC SQL BEGIN DECLARE SECTION ;char userid[20]="" ;
char username[20]="";
EXEC SQL VAR username IS STRING(20);
EXEC SQL END DECLARE SECTION;TESTConn(TPSVCINFO *rqst)
{
//接收客户端来的数据
strcpy(userid,"pub/pub@test");

strcpy(sbk,rqst->data);
    
EXEC SQL CONNECT :userid;

if (sqlca.sqlcode!=0)
{
userlog("Connection failure,sqlcode=%ld ,sqlerr=%s\n",sqlca.sqlcode,(char *)sqlca.sqlerrm.sqlerrmc);

strcpy(rqst->data,sqlca.sqlerrm.sqlerrmc);

tpreturn(TPFAIL,0,rqst->data,0,0);
}

EXEC SQL SELECT XM into :username FROM WZ_JC_SLDX WHERE SBK='A00015842';

if (sqlca.sqlcode!=0)
{
userlog("SELECT XM FROM WZ_JC_SLDX Failed,sqlcode=%ld ,sqlerr=%s\n",sqlca.sqlcode,(char *)sqlca.sqlerrm.sqlerrmc);

strcpy(rqst->data,sqlca.sqlerrm.sqlerrmc);

tpreturn(TPFAIL,0,rqst->data,0,0);
}
//把取出的结果返回给客户端
strcpy(rqst->data,username);

tpreturn(TPSUCCESS,0,rqst->data,0,0);
}客户端程序:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        char *sendbuf, *rcvbuf;
        long sendlen, rcvlen;
        int ret;
        tuxputenv("WSNADDR=//10.75.0.89:8899");
        tuxputenv("WSENVFILE=");
        if (tpinit(NULL)==-1)
        {
                Panel1->Caption = "error";
        }
        else
        {
                Panel1->Caption = "ok";
                sendlen = this->Edit1->Text.Length();
                if((sendbuf = (char *) tpalloc("STRING", NULL, sendlen+1)) == NULL)
                        {
                                ShowMessage("分配发送存贮空间失败!!") ;
                                tpterm();
                        }
                if((rcvbuf = (char *) tpalloc("STRING", NULL, sendlen+1)) == NULL)
                {
                        ShowMessage("分配接受存贮空间失败!!") ;
                        tpfree(sendbuf);
                        tpterm();
                }
                StrCopy(sendbuf,(this->Edit1->Text).c_str());
                ret = tpcall("TESTConn", sendbuf, 0, &rcvbuf, &rcvlen, 0);
                if (ret == -1)
                {
                        ShowMessage("调用服务失败");
                        ShowMessage (tpstrerror(tperrno))  ;
                        this->Edit2->Text = StrPas(rcvbuf);
                        tpfree(sendbuf);
                        tpfree(rcvbuf);
                        tpterm();
                        Abort();
                }
                this->Edit2->Text = StrPas(rcvbuf);
                tpfree(sendbuf);
                tpfree(rcvbuf);
                tpterm();
}
}