三大问题求解,优胜者加分

Description of your first forum.

三大问题求解,优胜者加分

帖子lili365 » 星期五, 2001年5月18日 22:05


对SQL SERVER中两张表的几个字段选择后进行格式化,我的测试代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
 sqlstr:string;
 i:integer;
 linestr:string;
begin
  button1.Enabled:=false;
  button2.Enabled:=false;
/*对需要的字段进行选择*/
  sqlstr:='select cinf_post_code,cinf_addr,cinf_cust_name,cinv_acc';
  sqlstr:=sqlstr+',cinv_ftr,cinv_call_loc,cinv_call_vil,cinv_call_dom1';
  sqlstr:=sqlstr+',cinv_call_dom2,cinv_call_int,cinv_call_rom';
  sqlstr:=sqlstr+',cinv_charge_amt,cinv_adj_amt,cinv_tot_amt,cinf_cust_id';
  sqlstr:=sqlstr+' from cinv_cust_invoice_tm,cinf_cust_info';
  sqlstr:=sqlstr+' where cinv_out_amt>10';
  sqlstr:=sqlstr+' and cinv_cust_id=cinf_cust_id';

  datamodule1.ADODataSet1.CommandText:=sqlstr;
  datamodule1.ADODataSet1.Open;
//   datamodule1.ADODataSet1.Last;
//   linestr:=datamodule1.ADODataSet1.Fields[14].asstring;
//   memo1.Lines.Add(linestr);
/*对临时产生的数据的每一个字段进行格式化处理*/
  if datamodule1.ADODataSet1.RecordCount=0 then
     begin
        memo1.Lines.Add('empty');
        memo1.Lines.Add(sqlstr);
        exit;
     end;
  with datamodule1.ADODataSet1 do
  begin
     memo1.Lines.Clear;
     First;
//   for i:=0 to RecordCount-1 do
  while not eof do
     begin
       application.ProcessMessages;
       linestr:=Fields[0].asstring;
       linestr:=linestr+Fields[1].asstring;
       linestr:=linestr+Fields[2].asstring;
       linestr:=linestr+formatfloat('0000000.00',Fields[3].asfloat);
       linestr:=linestr+formatfloat('0000000.00',Fields[4].asfloat);
       linestr:=linestr+formatfloat('0000000.00',Fields[5].asfloat);
       linestr:=linestr+formatfloat('0000000.00',Fields[6].asfloat);
       linestr:=linestr+formatfloat('0000000.00',Fields[7].asfloat);
       linestr:=linestr+formatfloat('0000000.00',Fields[8].asfloat);
       linestr:=linestr+formatfloat('0000000.00',Fields[9].asfloat);
       linestr:=linestr+formatfloat('0000000.00',Fields[10].asfloat);
       linestr:=linestr+formatfloat('0000000.00',Fields[11].asfloat);
       linestr:=linestr+formatfloat('0000000.00',Fields[12].asfloat);
       linestr:=linestr+formatfloat('0000000.00',Fields[13].asfloat);
       linestr:=linestr+format('%7d',[Fields[14].asinteger]);


       memo1.Lines.Add(linestr);
       memo1.Lines.Add(fields[14].asstring);
       next;
     end;
  end;
  button1.Enabled:=true;
  button2.Enabled:=true;
end;
------------------------------------------------------------------------
/*这里是SQLSTR产生的动态语句*/
{select cinf_post_code,cinf_addr
,cinf_cust_name,cinv_acc,cinv_ftr
,cinv_call_loc,cinv_call_vil,cinv_call_dom1,cinv_call_dom2
,cinv_call_int,cinv_call_rom,cinv_charge_amt,cinv_adj_amt
,cinv_tot_amt,cinv_cust_id
from cinv_cust_invoice_tm,cinf_cust_info
where cinv_out_amt>10
and cinv_cust_id=cinf_cust_id}
-----------------------------------------------------------------------
问题一
cinf_addr和cinf_cust_name分别代表一个人的家庭住址和姓名如
香港中路12号丰合广场C区一层美合家俱公司                      马桂欣
但查询产生的临时表中这两个字段均为空,我用这个语句在SQL SERVER中直接执行是
正确的,为什么在临时表中不正确,因为是中文吗,如何解决,我可是用了ADO的PACK的
-------------------------------------
问题二
我在用DBGRID显示查询结果时,只是显示第一条符合条件的记录,有什么方法处理
其他都不显示,于是格式化的字串也只有一条
266022    0000063.000000002.500000011.100000000.0。。。0.000000.000000.00      0
-------------------------------------
问题三
表中cinf_cust_id和cinv_cust_id都是整型,如用上面的临时语句在SQL SERVER中直接查询
的结果为:
cinf_post_code cinf_addr       cinf_cust_name cinv_acc  。。。。      cinv_cust_id
-------------- ---------------- ----------- ---------------------- ------------
266022         通化路7号           张军        30.00     。。。。          300    
266001         甘肃路52号甲306     王少媛      30.00     。。。。          400  

(2 row(s) affected)
而在delphi的处理结果却为:
cinf_post_code cinf_addr       cinf_cust_name cinv_acc  。。。。      cinv_cust_id
-------------- ---------------- ----------- ---------------------- ------------  
266022         (空)                (空)       30.00     。。。。          0 (错误)  
只一条记录,且cinv_cust_id结果为0,对应的格式串为:
266022(缺少地址和姓名,均为中文) 0000063.000000002.50。。。。00000.00     0(应为300)
------------------------------------------------------------------------------------
以上三个问题是新产生的,请大家献策,分数不成问题。
 
 
 

三大问题求解,优胜者加分

帖子Jams » 星期五, 2001年5月18日 23:46


>>
 
 
 

三大问题求解,优胜者加分

帖子touip » 星期三, 2001年5月23日 13:55


问题2:
 select top 1 字段名 from 表名
 
 
 

三大问题求解,优胜者加分

帖子郭玉梁 » 星期三, 2001年5月23日 17:49


升级你的ADO包,我用汉字没问题!
 
 
 

三大问题求解,优胜者加分

帖子lili365 » 星期四, 2001年5月24日 10:21


to 郭:
我升级了,但仍有问题。
 
 
 

三大问题求解,优胜者加分

帖子郭玉梁 » 星期四, 2001年5月24日 11:57


i服了you,我试着做了一下,没问题,你看看英文可否正确!
 
 
 

三大问题求解,优胜者加分

帖子maming » 星期四, 2001年5月24日 12:13


会不会是你的数据库字符集设置不正确?
 
 
 

三大问题求解,优胜者加分

帖子lili365 » 星期五, 2001年5月25日 12:15


现在这些问题我通过改变连接ADO的方式,即通过ODBC连接SQL SERVER都解决。但我想
用ADO通过。。。OLE 。。。连接SQL SERVER 即我如上所遇到的问题,又是BUG吗?,谢谢
各位帮助,请献策。
 
 
 

三大问题求解,优胜者加分

帖子lili365 » 星期六, 2001年9月8日 14:51


多人接受答案了。