关于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();
}
}
服务器端的程序如下
#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();
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货