关于String类型的问题?(不够就加分)

码狂 2000-06-16 07:07:00
1、如何将String的类型转换成ArrayChar,我问过Borland中国有限公司,说是用循环。可以ArrayChar的长度是不能确定的。也可以说,如何将大于255长的字符串存入记录文件中?
2、在用Query控件插入、修改数据时,对于长于255的中文长出现问题(不可预见性错误),请问如何解决?
...全文
262 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
szdino 2000-07-18
  • 打赏
  • 举报
回复
我写过一个函数去做这个事情

procedure strtoarr(s:string;var a: array of char);
var p:pchar;
I,leng:integer;
begin
p:=pchar(s);
leng:=length(s);
for I := 0 to (leng-1) do
begin
a[i]:=p^;
inc(p);
end;
end;
sun2000 2000-07-17
  • 打赏
  • 举报
回复
String类型能超过255个字符的长度吗?
好象不可以吧。
JGTM2000 2000-07-17
  • 打赏
  • 举报
回复
sun2000: string类型是一个二义类型,在Delphi中如果在默认的编译器开关指示下({$H+}),string类型等价于AnsiString,这是一个由编译器动态从堆中分配内存并自动管理的且和char*内存布局兼容的长字串类型,能多长?2G,而不是255。相反,由于历史原因,以前也存在过string类型,即所谓的短字串,ShortString。他的内存布局和C中常见的char*是不同的,它的首元素字节为长度(因此其最大长度为0xFF),后面才是字串内容。

Ary: 简单的使用内存拷贝技术即可以完成你的第一个问题:

procedure Test;
var
a: array [0..1023] of char;
s: string;
begin
CopyMemory(@a,PChar(s),Length(s)+1); // plus 1 because the null-terminal
ShowMessage(a);
end;

当然相反的过程就不必费劲了,s:=a就成了。
JockWang 2000-07-17
  • 打赏
  • 举报
回复
在Query中动态使用参数,然后使用参数的LoadFromStream方法。
Hank 2000-07-17
  • 打赏
  • 举报
回复
这些问题可能是BORLAND系列开发工具的BUG!如果你用PARADOX数据库,第一个问题根本就不能解决!因为它不能辨认超过255的字符串,除非换成别的数据库(例如:ACCESS、SQLSERVER)!而且要直接用数据库TMemo控件保存,如果值为空,可能保存不了(是不是很怪!)!
第二个问题同第一个问题本质上差不多,亦出现此类问题!换成别的数据库是没问题,但是可呢出现更烦人的问题——如果SQL语句中包含MEMO字段,那很不幸,你的查询出的记录条数有问题,是-1条!我只在ACCESS数据库下试过,估计SALSERVER下难逃厄运!
以上两个问题估计均是BORLAND系列开发工具的BUG,不过没有在ORACLE、SYBASE数据库下试过有没有此类问题!烦请各位高手提供资料!
Un1 2000-07-13
  • 打赏
  • 举报
回复
使用第一个元素地质和string首地质直接内存拷贝
SuperMMX 2000-07-13
  • 打赏
  • 举报
回复
1, 你的记录文件为什么样的文件? 为什么不直接存?
2,
码狂 2000-06-17
  • 打赏
  • 举报
回复
能再详细一点吗?高手那里去了?
shylsz 2000-06-17
  • 打赏
  • 举报
回复
1.
for i:=0 to length(string)-1 do begin
...
...
end;
2.字符型字段长度不能超过255,不过可以用别的类型,如MEMO




windoze 2000-06-16
  • 打赏
  • 举报
回复
可以用下面的转换PChar(SomeString)将String类型转换为字符指针,这样你不就可以用二进制方式写文件了吗?
至于第二个问题,我想可能是因为你使用的数据库字段类型的问题吧。

5,386

社区成员

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

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