![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Длина поля String в ClientDataSet [D7, XP]
pavor © (2011-09-22 13:28:00)Добрый день,
пишется программа, в которой для формирования списка используется ClientDataSet в памяти. Все было в порядке, но возникают проблемы, когда добавляются строки больше определенного числа символов (оно всегда одно и то же: 64 символа и не зависит от установленного размера поля).
Проверял, все строковые значения передаются в нормальном виде, а после записи в базу "портятся".
Вот функция, которая формирует запись:
procedure StoreToList (Drw:TDItem);
begin frmDrwLstModule.DrwLstClientDataSet.Append;
frmDrwLstModule.DClientDataSet.FieldByName('Number').AsString:=StripPerformance( Drw.Number);
frmDrwLstModule.DClientDataSet.FieldByName('Designation').AsString:=Drw.Designat ion;
frmDrwLstModule.DClientDataSet.FieldByName('SheetsNum').AsInteger:=Drw.SheetsNum ;
frmDrwLstModule.DClientDataSet.FieldByName('AssyNum').AsInteger:=Drw.AssyNum;
frmDrwLstModule.DClientDataSet.FieldByName('IsSpec').AsBoolean:=Drw.IsSpec;
frmDrwLstModule.DClientDataSet.Post;
end;
Может, вопрос уже избитый, подскажите, в чем может быть дело?
Ega23 (2011-09-23 09:55:00) [1]
> Так делал, Clear Data сначала, потом Create Data Set
Код показывай.
pavor (2011-09-23 07:43:00) [2]Так делал, Clear Data сначала, потом Create Data Set
Ega23 (2011-09-23 07:40:00) [3]
> и почему-то он не реагирует на изменения размера полей
> типа String
CreateDataSet
pavor (2011-09-23 07:04:00) [4]Заработало.
Ega23, ваш пример навел меня на мысль. У меня ClientDataSet настраивается в design time и почему-то он не реагирует на изменения размера полей типа String, видимо, в самом начале было задано 64, после я менял это значение, но эффекта не было (может, не все операции сделал, конечно).
Короче говоря - заработало нормально только тогда, когда имеющийся ClientDataSet "грохнул" и создал заново с нужными параметрами.
Но это же не дело. У меня полей было меньше десяти, а если бы штук 50?
Скорее всего, просто чего-то не знаю.
Ega23 (2011-09-22 14:03:00) [5]
> в чем может быть дело?
Не знаю, у меня всё отлично работает:
unit uMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBClient, StdCtrls;
type
TForm22 = class(TForm)
CDS: TClientDataSet;
Memo1: TMemo;
Edit1: TEdit;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
procedure RefreshMemo;
public
{ Public declarations }
end;
var
Form22: TForm22;
implementation
{$R *.dfm}
//*****************************************************************************
procedure TForm22.Button1Click(Sender: TObject);
begin
CDS.Append;
try
CDS.FieldByName('TestStrField').AsString := Edit1.Text;
finally
CDS.Post;
end;
RefreshMemo;
end;
//*****************************************************************************
procedure TForm22.FormCreate(Sender: TObject);
begin
with CDS.FieldDefs.AddFieldDef do
begin
DataType := ftString;
Name := 'TestStrField';
Size:=255;
end;
CDS.CreateDataSet;
RefreshMemo;
end;
//*****************************************************************************
procedure TForm22.RefreshMemo;
var
s: string;
begin
with Memo1 do
begin
Clear;
CDS.First;
while not CDS.Eof do
try
s := CDS.FieldByName('TestStrField').AsString;
Lines.Add(IntToStr(Length(s)) +#9 + s);
finally
CDS.Next;
end;
end;
end;
//*****************************************************************************
end.