Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Длина поля 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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо