当前位置:主页>销售管理软件> 列表

[高分求教]一个奇怪问题,困扰我有一段时间了。求救!! 找进销存月报表

销售管理软件版1楼: 使用 delphi7 编程 主要使用 idhttp读取网页源码 至memo1 然后使用adoquery对所找到的memo1的相关行数,进行写入至mssql2000数据库。
数据库 结构 a(序号,主键,整型 )
b1(存储内容第一行,char型,长度30)
b2(存储内容第二行,char型,长度30)
b3(存储内容第三行,char型,长度30)
我所取内容长度都小于15,
现在在对数据库进行写入时 假设程序显示 所需3个字段为
b1:=恭喜发财
b2:=恭喜发财万事如意
b3:=恭喜发财万事如意心想事成
可是存到 数据库 中就变成了
b1:=恭喜
b2:=恭喜发财
b3:=恭喜发财万事
怎么试验都是这样。(运行的时候程序没出任何问题和错误提示。)
以上的现象在内容为半角英文字母的情况下也还是100%出现。
在使用英文半角和中文全角的情况下也出现,并且存入的内容并不像以上的情况那样整整好好是一半,或者一半多点,或者一半少点。
我使用的这台sql服务器还做其它的数据服务,其它的程序没问题。请问谁碰到过没有??怎么解决的???
使数据库的问题吗??

2楼: 自己顶 如管家婆财务软件官网

3楼: 存的时候字段类型为 widestring

4楼: 帮你顶

5楼: 同意qi_jianzhou说法,应该把字段类型改为widestring。[:D]

6楼: 好象是单字节和双字节的问题哦
查查看

销售管理软件版7楼: 刚刚测试过,两位仁兄,wide这个办法不行。

8楼: 来自:iamy, 时间:2006-3-10 16:14:02, ID:3378153
好象是单字节和双字节的问题哦
查查看

问题是在数据库上吗?

9楼: 你是怎么写入到数据库的?
贴代码看看

10楼: 不行呀,我就是这么解决的呀?

11楼: 帖代码

adoquery1.close;
adoquery1.SQL.clear;
adoquery1.SQL.Add(''select * from we'');
adoquery1.SQL.Add(''INSERT [we] ( [date] , [b1],[b2],[b3]) VALUES ( :t0, :t1, :t2, :t3)'');
adoquery1.Parameters[0].Value:=''2006-3-10'';
adoquery1.Parameters[1].Value:=memo1.line[12];
adoquery1.Parameters[2].Value:=memo1.line[13];
adoquery1.Parameters[3].Value:=memo1.line[14];
adoquery1.Open;

12楼: 前面几位说的满有道理的,
可能是数据库字段类型不对哦,
或者看看adoquery取数据的时候是不是存在问题哦 如库存软件

13楼: adoquery1.Parameters[1].Value:=memo1.line[12];
adoquery1.Parameters[2].Value:=memo1.line[13];
adoquery1.Parameters[3].Value:=memo1.line[14];
估计问题出在这里
不用参数试试呢

销售管理软件版14楼: 不行的,我在使用string的时候,在储存数据后,对memo1.line[12];memo1.line[13];memo1.line[14];进行取值显示,没有任何问题。但是数据库就是不对。

15楼: 来自:iamy, 时间:2006-3-10 16:26:07, ID:3378183
adoquery1.Parameters[1].Value:=memo1.line[12];
adoquery1.Parameters[2].Value:=memo1.line[13];
adoquery1.Parameters[3].Value:=memo1.line[14];
估计问题出在这里
不用参数试试呢
试了的。
我现在的代码是
s1:=memo1.line[12];
s2:=memo1.line[13];
s3:=memo1.line[14];

adoquery1.Parameters[1].Value:=s1;
adoquery1.Parameters[2].Value:=s2
adoquery1.Parameters[3].Value:=s3;
你说的是不是这样???还是不行~~~

16楼: SQL := ''INSERT [we] ( [date] , [b1],[b2],[b3]) VALUES (''
+ QuotedStr(''2006-3-10'') + '',''
+ QuotedStr(memo1.line[12]) + '',''
+ QuotedStr(memo1.line[13]) + '',''
+ QuotedStr(memo1.line[14];
adoquery1.Close;
adoquery1.SQL.Text := SQL;


adoquery1.ExecuteSQL;

17楼: 来自:slqbs-gy, 时间:2006-3-10 16:24:16, ID:3378180
前面几位说的满有道理的,
可能是数据库字段类型不对哦,
或者看看adoquery取数据的时候是不是存在问题哦

能说得详细些吗??

18楼: 来自:iamy, 时间:2006-3-10 16:29:20, ID:3378194
SQL := ''INSERT [we] ( [date] , [b1],[b2],[b3]) VALUES (''
+ QuotedStr(''2006-3-10'') + '',''
+ QuotedStr(memo1.line[12]) + '',''
+ QuotedStr(memo1.line[13]) + '',''
+ QuotedStr(memo1.line[14];
adoquery1.Close;
adoquery1.SQL.Text := SQL;
adoquery1.ExecuteSQL;

这个办法试过~~~没起效果~~~~谢谢~~~

19楼: SQL := ''INSERT [we] ( [date] , [b1],[b2],[b3]) VALUES (''
+ QuotedStr(''2006-3-10'') + '',''
+ QuotedStr(memo1.line[12]) + '',''
+ QuotedStr(memo1.line[13]) + '',''
+ QuotedStr(memo1.line[14];
adoquery1.Close; //在这里设置个断点 看看SQL的内容是什么
adoquery1.SQL.Text := SQL;
adoquery1.ExecuteSQL;

20楼: 告诉你吧。


如果使用memo1.line取值正确,
而使用adoquery的参数赋值不正确。
原因很简单。
参数赋值对参数是根据字符串的类型进行赋值。char和memo1.的类型string是不同的。
adoquery通过参数赋值可能就是找不到。
解决办法:
adoquery1.close;
adoquery1.SQL.clear;
adoquery1.SQL.Add(''select * from we'');
adoquery1.SQL.Add(''INSERT [we] ( [date] , [b1],[b2],[b3]) VALUES ( :t0, :t1, :t2, :t3)'');
adoquery1.Parameters[0].Value:=''2006-3-10'';
adoquery1.Parameters[1].Value:=memo1.line[12];
adoquery1.Parameters[2].Value:=memo1.line[13];
adoquery1.Parameters[3].Value:=memo1.line[14];
adoquery1.Open;
把以上的参数赋值的办法换掉。
改成:
adoquery1.close;
adoquery1.SQL.clear;
adoquery1.SQL.Add(''select * from we'');
adoquery1.SQL.Add(''INSERT [we] ( [date] , [b1],[b2],[b3]) VALUES ( ''+
b1=''''''+2006-3-10"'',''''''+memo1.line[12]+'''''',''''''memo1.line14+''''''....''+
''''''''''略
adoquery1.open;

改成直接写的样子,就OK了。

销售管理软件版21楼: 如果还不正确,就要检查日期,类型是否正确。
字符,数字,字符串,字符等类型的方法不同。

22楼: 数据库里b1,b2,b3
是什么类型的? 如进销存月报表

23楼: 可能是SQL里的数据类型不对吧,你把char改成varchar再试试。[:)]

24楼: 数据库里b1,b2,b3
是什么类型的?

char

25楼: 来自:醉亦醒, 时间:2006-3-10 16:43:55, ID:3378222
可能是SQL里的数据类型不对吧,你把char改成varchar再试试。[:)]

我去试试~~~

26楼: 来自:醉亦醒, 时间:2006-3-10 16:43:55, ID:3378222
可能是SQL里的数据类型不对吧,你把char改成varchar再试试。[:)]

我去试试~~~

测试通过~~~~谢谢~~~谢谢大家~~暂不结贴~~~等待最好的方法~~~

27楼: 更换类型算了,char 不如改成nvarchar.最好更新SQLSERVER的类型。
前台就好写了。
要不使用sql.text的字符就难写了。
字符呢,,,,说不好还有把你的memo1.lines个每一行都要转换一下。

销售管理软件版28楼: 太不厚道了~~~
还不给分~~~

29楼: 因为SQL SERVER 的char有空间和ascII的限制


最好的字符类型是varchar
varchar没有字符前后的空格。
而char实际上包含结尾好多的空格。

30楼: 与网页的编码方式有关,网页有的是utf-8的,有的是gbk的,所以会出现那种情况

31楼: 结贴
~~~