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

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

TClientDataSet (TDataset) проапдейтить поле [D7]


AV ©   (2012-02-07 16:17:00) 

подумал, что велосипед поди пишу..

procedure TTxtToCDS.UpdateField(sNameField: string; var vValue: Variant);
var
 BM: TBookmark;
begin
 if FCDS.FindField(sNameField)= nil then
 begin
   if vValue = -1 then
     vValue := -11 else
     vValue := -1;
   Exit;
 end;
 BM := FCDS.GetBookmark;
 FCDS.First;
 while not(FCDS.Eof) do
 begin
   FCDS.Edit;
   FCDS.FieldByName('sNameField').Value := vValue;
   FCDS.Post;
   FCDS.Next;
 end;
 FCDS.GotoBookmark(BM);
 FreeAndNil(BM);
end;

а еще where часть неплохо бы..

(Запросом нельзя! :) , (т.к. из текстовых файлов подгружается, формата наперед неизвестного, к-рый вычисляется по ходу))


И. Павел   (2012-02-08 08:27:00) [1]

> хм.. посмотрю.. что-то не уверен

Из справки по TDataSet:
Call Next to move to the next record in the dataset, making it the active record. Next posts any changes to the active record


AV   (2012-02-07 17:42:00) [2]


> Одного достаточно.

хм.. посмотрю.. что-то не уверен


> Ничего не понял, но DisableControls/EnableControls я бы
> таки включил. :)

Включу :)
ну например, есть много разных файлов, формата с разделителем или позиционные, удобнее с ними работать как с таблицей
мой класс делает
FileDS := TTxtToCDS.Create;
формата с разделителем
FileDS.Delimetr := ';';
FileDS.DefineClientDataSetFields('UACCOUNT,ftString,50;UPHONE,ftString,10;user_i d,ftInteger,0');
или
позиционные
FileDS.Delimetr := '';
FileDS.DefineClientDataSetFields('UACCOUNT,ftString,50,0,30;UPHONE,ftString,10;R SLT,ftInteger,0');

 FileDS.LoadFromFile('1.txt');

Получаю таблицу (ClientDataSet) из файла вида
FNs47569;0123456789;-1
FNs47569;0213456789;-1
FNs47569;0132456789;-1
FNs47569;0123566789;-1

в обычном SQL что бы проадейтить поле RSLT надо написать update T set RSLT = 1
А в файле что бы такое сделать, пишу
FileDS := TTxtToCDS.Create;
FileDS.DefineClientDataSetFields('UACCOUNT,ftString,50;UPHONE,ftString,10;user_i d,ftInteger,0');
FileDS.LoadFromFile('1.txt');

арбайтен с UACCOUNT UPHONE
и

FileDS.UpdateField('RSLT', 1);
FileDS.SaveToFile('1-complete.txt');


Ega23   (2012-02-07 16:49:00) [3]

Ничего не понял, но DisableControls/EnableControls я бы таки включил. :)


И. Павел   (2012-02-07 16:47:00) [4]

>   FCDS.Post;
>   FCDS.Next;

Одного достаточно.


Наверх

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