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

解决方案 »

  1.   

    1.
    for i:=0 to length(string)-1 do begin
    ...
    ...
    end;
    2.字符型字段长度不能超过255,不过可以用别的类型,如MEMO
       
      

  2.   

    使用第一个元素地质和string首地质直接内存拷贝
      

  3.   

    在Query中动态使用参数,然后使用参数的LoadFromStream方法。
      

  4.   

    String类型能超过255个字符的长度吗?
    好象不可以吧。
      

  5.   

    这些问题可能是BORLAND系列开发工具的BUG!如果你用PARADOX数据库,第一个问题根本就不能解决!因为它不能辨认超过255的字符串,除非换成别的数据库(例如:ACCESS、SQLSERVER)!而且要直接用数据库TMemo控件保存,如果值为空,可能保存不了(是不是很怪!)!
    第二个问题同第一个问题本质上差不多,亦出现此类问题!换成别的数据库是没问题,但是可呢出现更烦人的问题——如果SQL语句中包含MEMO字段,那很不幸,你的查询出的记录条数有问题,是-1条!我只在ACCESS数据库下试过,估计SALSERVER下难逃厄运!
    以上两个问题估计均是BORLAND系列开发工具的BUG,不过没有在ORACLE、SYBASE数据库下试过有没有此类问题!烦请各位高手提供资料!
      

  6.   

    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就成了。
      

  7.   

    我写过一个函数去做这个事情 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;