关于TStringList的Count求助

icegirl914 2010-05-25 09:51:00
with TStringList.Create() do
try
LoadFromFile(FilePath);
if Count = 0 then Exit;
S := '';
for i := 0 to Count - 1 do
begin
if UpperCase(Trim(Strings[i])) = 'GO' then
begin
DBConnection.Execute(S);
S := '';
end
else
S := S + Strings[i] + #13 + #10;
end;
finally
Free;
end;


这段代码是用来建数据库里的表的,FilePath里的文件路径内容都正确,但是我运行却没有建成库,我后来发现是Count=1,但是事实上文件里有好几个表的CREATE TABLE语句,求助怎么样才能解决这个问题?
...全文
195 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
icegirl914 2010-05-26
  • 打赏
  • 举报
回复
后面的朋友不好意思,帖子前面先结了,没有分了,还是谢谢各位朋友
icegirl914 2010-05-25
  • 打赏
  • 举报
回复
我都试了,结果还是一样
林石公 2010-05-25
  • 打赏
  • 举报
回复
分别试试行不?
icegirl914 2010-05-25
  • 打赏
  • 举报
回复
To 5楼的朋友:

分隔符设为换行符怎么设置?


To 6楼的朋友:

我看了一下文件的字符集,它里面只有两个选项,一个是西方,一个是CHINESE_GB2312
林石公 2010-05-25
  • 打赏
  • 举报
回复
看一下你的scripte文件字符集,最好用ansi试试看
bamboo2000 2010-05-25
  • 打赏
  • 举报
回复
TStringList 的分隔符设为换行符
icegirl914 2010-05-25
  • 打赏
  • 举报
回复
我试了,去不去GO结构都一样,我用下面的方法试了一下:
list := TStringList.Create;
list.LoadFromFile(FilePath);

ShowMessage(IntToStr(Length(list.Strings[0])) + ':' + list.Strings[0]);

结果显示的是3:馀 (后面的是个乱码)
guanking 2010-05-25
  • 打赏
  • 举报
回复
DBConnection.Execute 执行的SQL脚本不需要 go.去掉go,再试试。
如果count==1,检查一下Strings[0]的内容。是否包含了全部的SQL语句。
icegirl914 2010-05-25
  • 打赏
  • 举报
回复
CREATE TABLE TB_AREATYPE(
ID int IDENTITY (1, 1) NOT NULL,
AREATYPE nvarchar(20) NOT NULL,
AREANO nvarchar(10) NOT NULL,
OPERID nvarchar(10) NOT NULL
)
GO

SQL文件就是这种格式
haitao 2010-05-25
  • 打赏
  • 举报
回复
是不是go后面有分行?

count==1?是不是sql文件没有换行?
林石公 2010-05-25
  • 打赏
  • 举报
回复
果然还是字符集的问题
僵哥 2010-05-25
  • 打赏
  • 举报
回复
碰到Unicode的情况,可以使用TWideStringList(WideStrings.pas单元定义)替代TStringList解决。
僵哥 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 icegirl914 的回复:]
谢谢上面回帖的朋友,问题已经解决了,其实我也不知道怎么回事,我原先是在SQL server2000里生成的脚本,我用楼上朋友说的ultraedit工具看,发现有0D0A,但是显示出来是000D000A,是两个字节一个单位的,我现在在原先同事用的一个scripte文件的基础上,自己再把代码打进去,这样一运行建表就成功了,我看过两个文件的不同处就如:可以建表的显示0D0A,建不了表的是000D000A……
[/Quote]
那叫Unicode...
icegirl914 2010-05-25
  • 打赏
  • 举报
回复
问题已经解决上面所说的不同处我会再查下原因,谢谢各位朋友,分不多,谢谢!
icegirl914 2010-05-25
  • 打赏
  • 举报
回复
谢谢上面回帖的朋友,问题已经解决了,其实我也不知道怎么回事,我原先是在SQL server2000里生成的脚本,我用楼上朋友说的ultraedit工具看,发现有0D0A,但是显示出来是000D000A,是两个字节一个单位的,我现在在原先同事用的一个scripte文件的基础上,自己再把代码打进去,这样一运行建表就成功了,我看过两个文件的不同处就如:可以建表的显示0D0A,建不了表的是000D000A
nanchangfantasy 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 nanchangfantasy 的回复:]
to icegirl914,我刚测试过,完全可以,建议用工具如ultraedit等查看该文件的十六进制编码,查看是否没行末尾出现#13#10(delphi 表示),或16进制表示为:0D0A,如果是的话就行,不是的话就是你所说的count为0(笔误,可能为1).如果不是,解决方案就是你设置stringlist的Delimiter为你的sql文件的分隔符号.再设置delimiterText,然后使用count也可以满……
[/Quote]
nanchangfantasy 2010-05-25
  • 打赏
  • 举报
回复
to icegirl914,我刚测试过,完全可以,建议用工具如ultraedit等查看该文件的十六进制编码,查看是否没行末尾出现#13#10(delphi 表示),或16进制表示为:0D0A,如果是的话就行,不是的话就是你所说的count为0.如果不是,解决方案就是你设置stringlist的Delimiter为你的sql文件的分隔符号.再设置delimiterText,然后使用count也可以满足你的要求..
请楼主拿去测试,祝你通过

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧