请教一个pchar变量和一个类型变量的问题(50分)

  • 主题发起人 主题发起人 liuri
  • 开始时间 开始时间
L

liuri

Unregistered / Unconfirmed
GUEST, unregistred user!
请教一个pchar变量和一个类型变量的问题
1、是关于MESSAGEBOX的,我想把里面的提示用变量表示,于是就:
procedure TForm1.Button1Click(Sender: TObject);
var
text,caption,check:pchar;
begin
text:='中国';
caption:='提示';
check:='程序';
text:=text+check;
//不能这样加,这样加就出错,是不是由于是指针类型的原故,那假如我要达到这样的效果,应该怎么做呢
application.MessageBox(text,caption,mb_ok);
end;

2、我定义了一个过程
procedure TMain.gsb_snlocate(idQuery:TADOQuery);
这样,输入参数是一个TADOQuery
但现在,我想输入参数是一个TADOSTOREDPROC
也就说要:
procedure TMain.gsb_snlocate(idQuery:TADOstoredproc);
函数里面的代码是一模一样的,可不可能只需定义一个函数,把那个TADOQuery也做为输入参数,然后我就可以根据这个输入参数来给idQuery定义?
 
1.其实用string比较方便,可以直接相加,调用时pchar(str)就可以了。
但如果你非要这样,也可以用strcat():
procedure TForm1.Button1Click(Sender: TObject);
var
Buffer: PChar;
begin
GetMem(Buffer,Length(Label1.Caption) + Length(Edit1.Text) + 1);
StrCopy(Buffer, PChar(Label1.Caption));
StrCat(Buffer, PChar(Edit1.Text));
Label1.Caption := Buffer;
Edit1.Clear;
FreeMem(Buffer);
end;
 
我只要可以实现就可以了,我以为必须要用PCHAR,呵呵,谢谢,试试先:)
 
嗯,可以了,谢谢,请教zw84611,第二个问题可否实现呢?
 
如果不考虑效率的话,这样也可以:
text:=PChar(string(text)+string(check));
 
第2个问题可以将输入参数定义为Object,在过程中判断:)
 
pchar 是字符串指针;
所以不能用+作为连接符;
连接字符串如843611所说;就像c中操作字符串
 
ydfq:
你的意思是不是指这样定义
procedure TMain.gsb_snlocate(idQuery:object);
那我在过程中又应该怎么判断呢,能否举一例,不好意思,学DLEPHI不久:)
 
是的啊,在过程中可以如此判断:
if uppercase(idQuery.ClassName)=uppercase('TAdoQuery') then
showmessage('TADoQuery');
if uppercase(idQuery.ClassName)=UpperCase('TAdoStoredProc') then
showmessage('proc');
你的定义中的类型不是Object,应该是TObject:)
procedure TMain.gsb_snlocate(idQuery:Tobject);
 
其实,我只是在这个过程里有一个引用,如:
idQuery.fieldbyname(fname).asinteger;
那我是不是不要进行什么判断了,是不是DELPHI会自动识别,不过刚试了一下,
好象是不行的,呵呵:)
这里又没引用类型,还是不知道做:$
 
呵呵,这样啊可以这样:
if uppercase(idQuery.ClassName)=uppercase('TAdoQuery') then
TADoQuery(idQuery).FieldByName(fname).asinteger
else
if uppercase(idQuery.ClassName)=UpperCase('TAdoStoredProc') then
TAdoStoredProc(idQuery).FieldByname(fname).asinteger
强制转换:)
 
谢谢,可以了,顺便问一下,贴子可不可加分,比如我现在是50,想改为100:)
 
好像不行:)没有试过~你可以另开帖子啊:)
 
查了一下,好象不行,算了,结了,分太少了,呵呵,再次谢过:)
 
后退
顶部