Форум: "Начинающим";
Текущий архив: 2012.01.01;
Скачать: [xml.tar.bz2];
ВнизДлина поля String в ClientDataSet Найти похожие ветки
← →
pavor (2011-09-22 13:28) [0]Добрый день,
пишется программа, в которой для формирования списка используется 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-22 14:03) [1]
> в чем может быть дело?
Не знаю, у меня всё отлично работает:
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.
← →
pavor (2011-09-23 07:04) [2]Заработало.
Ega23, ваш пример навел меня на мысль. У меня ClientDataSet настраивается в design time и почему-то он не реагирует на изменения размера полей типа String, видимо, в самом начале было задано 64, после я менял это значение, но эффекта не было (может, не все операции сделал, конечно).
Короче говоря - заработало нормально только тогда, когда имеющийся ClientDataSet "грохнул" и создал заново с нужными параметрами.
Но это же не дело. У меня полей было меньше десяти, а если бы штук 50?
Скорее всего, просто чего-то не знаю.
← →
Ega23 © (2011-09-23 07:40) [3]
> и почему-то он не реагирует на изменения размера полей
> типа String
CreateDataSet
← →
pavor (2011-09-23 07:43) [4]Так делал, Clear Data сначала, потом Create Data Set
← →
Ega23 © (2011-09-23 09:55) [5]
> Так делал, Clear Data сначала, потом Create Data Set
Код показывай.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2012.01.01;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 1.098 c