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

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

SQL запросы в XML через ClientDataSet


Страницы:   1 2

Galiaf ©   (2007-05-26 18:02:00) 

Пока писал на ado для access даже не использовал DataControls, а вот по сабжу появились проблемы, если я не собираюсь использовать TDBGrid или использовать толкьо для чтения, как же мне тогда добавлять, редактировать и удалять записи одним только ClientDataSet'ом? Я пытался прописать самый простой запрос в commandTex но даже он не работает.


  (2007-08-08 22:58:00) [1]

Удалено модератором


Galiaf   (2007-06-05 08:24:00) [2]

А я про глюк уже забыл, спасибо тебе. Панель заменил формой за 5-8 мин.


sniknik   (2007-06-04 00:19:00) [3]

> Отображал нормально.
а потом куданибудь вставил DisableControls; и забываешь про него...

я же тебе говорил, упрощай(!!!), сделай отдельно проект и попытайся воспроизвести свой глюк "в три действия"... получится, на четвертом, тогда будеш точно знать от чего.


Galiaf   (2007-06-03 23:15:00) [4]

L
> Для этого придумали модальный показ форм

Я в курсе, просто решил сразу делать на панели, а потом уже буду на форму кидать, в общем лень было сразу.
> ну а то что дизейбленный грид не отображает твоих же изменений
> по Append нормально?

Отображал нормально.


ЮЮ   (2007-06-02 13:11:00) [5]

панель - вместо окна для редактирования, видна должна быть только при добавлении/изменении записи, после применения исчезает, грид дисэйблить для того, чтобы юзер случайно не кликнул по другой записи т.к. все изменения происходят только для текущей записи, сам запись я не указываю нигде.

Для этого придумали модальный показ форм


sniknik   (2007-06-02 12:58:00) [6]

> грид дисэйблить для того, чтобы юзер случайно
ну а то что дизейбленный грид не отображает твоих же изменений по Append нормально?

дизейблить нужно не отображающие контролы, а управляющие (кнопки), если не хочеш чтобы юзер случайно не сделал повтор действия. а сами действия должны быть короткие, не разорванные... так чтобы юзер между началом и окончанием не мог ничего испортить.


Galiaf   (2007-06-02 11:03:00) [7]


> TBlobField(cds.FieldByName('Img')).LoadFromFile('img_none.
> bmp')

Не пойдёт, рисунок в базу сохраняется из timage или не сохраняется совсем
> cds.FieldValues['img']:='';

Принцип мне ясен, временем позже посмотрю.


Galiaf   (2007-06-02 10:46:00) [8]

Делал по кнопке добавить добавление строки, а присваивал по другой кнопке, сейчас сделал так чтобы добавление происходило по кнопке "ОК"
 if add then
   cds.Append
 else
   cds.Edit;

Пока добавляет нормально


> зачем дизейблить грид


> и что за игры с видимо/невидимо в момент отладки


DBGrid.readonly=true;//каприз "заказчика"
панель - вместо окна для редактирования, видна должна быть только при добавлении/изменении записи, после применения исчезает, грид дисэйблить для того, чтобы юзер случайно не кликнул по другой записи т.к. все изменения происходят только для текущей записи, сам запись я не указываю нигде.


sniknik   (2007-06-02 00:32:00) [9]

> что-то не так делаю но по-моему правильно.
если есть сомнения то делай проще... по максимуму

begin
 Append;
 FieldValues['name']:= '???';
 Post;
end;

так создает новую? или просто передвигает в конец?

img.Picture.LoadFromFile('img_none.bmp');

BF:=cds.CreateBlobStream(cds.FieldByName('Img'), bmWrite);
Img.Picture.Bitmap.SaveToStream(BF);
bf.Position:=0;
TBlobField(cds.FieldByName('Img')).LoadFromStream(BF);
bf.Free

вот это меняется на
TBlobField(cds.FieldByName('Img')).LoadFromFile('img_none.bmp')

cds.FieldValues['img']:=''; //строку в рисунок?
panel.Visible:=true;
panel.Visible:=false;
grid.Enabled:=false
grid.Enabled:=true;
grid.Repaint
? что за бред? зачем дизейблить грид специально чтобы не видеть изменений в нем? на момент добавления. и что за игры с видимо/невидимо в момент отладки? пока отлаживаешь видно должно быть все.


Galiaf   (2007-06-01 23:27:00) [10]


> это у тебя ошибка в программе.


procedure TForm1.Add1Click(Sender: TObject);
begin
 cds.Last;
 cds.Append;
//  cds.Insert;
 img.Picture.LoadFromFile('img_none.bmp');
 pename.Text:='Name';//pe=PanelEdit эдиты на панели
 pecount.Text:='Count';
 pepresence.Text:='Presence';
 panel.Visible:=true;
 add:=true;
 block
end;

procedure TForm1.OkClick(Sender: TObject);
var
BF: TStream;
begin
 if not add then
   cds.Edit;
 cds.FieldValues['name']:=pename.Text;
 cds.FieldValues['count']:=strtointdef(pecount.Text,0);
 cds.FieldValues['presence']:=pepresence.Text;
 if cbi.Checked then //чекс бокс
   begin
     BF:=cds.CreateBlobStream(cds.FieldByName('Img'), bmWrite);
     Img.Picture.Bitmap.SaveToStream(BF);
     bf.Position:=0;
     TBlobField(cds.FieldByName('Img')).LoadFromStream(BF);
     bf.Free
   end
 else
   cds.FieldValues['img']:='';
 cds.Post;
 panel.Visible:=false;
 add:=false;
 unblock
end;

procedure TForm1.block;
begin
 grid.Enabled:=false
end;

procedure TForm1.unblock;
begin
 grid.Enabled:=true;
 grid.Repaint
end;


Вот лично я ошибку не нашёл, может конечно от неопытности что-то не так делаю но по-моему правильно.


Galiaf   (2007-06-01 00:33:00) [11]


>  И "таскать с собой" надо не больше чем в случае с mdb

Вчера принёс на компьютер в отдел кадров программу с базой *.mdb и програму с базой *.xml. "Интересно" почему же xml кинул ошибку о не установленном "как_его_там.dll", а mdb, даже не заикнулся, работал и выполнял свои функции корректно.

> положи 1 датасет на форму, скомпили, посмотри размер екзешника,
>  после на ту же форму накидай еще скажем 127 датасетов (для
> круглого счета), скомпили, посмотри размер.

Ну легче у меня на душе когда компонентов меньше на форме, наверное по этому по возможности пишу на чистом апи, а потом ещё пытаюсь вырезать всё лишнее :).


sniknik   (2007-05-30 11:03:00) [12]

Galiaf ©   (30.05.07 09:07) [12]
> то append не создаёт новую, а только передвигает в конец
это у тебя ошибка в программе.

> Делать insert или last перед append?(ваше мнение)
написать без ошибок.

> чтобы не кидать на форму 3 clientDataSet'а
а чтобы не занимать место хранить CD диски кучей, перед использованием вкладывать нужный в единственную коробочку (заменить на ней этикетки естественно)... типа сделать вид что в ней и хранилось.
???
положи 1 датасет на форму, скомпили, посмотри размер екзешника, после на ту же форму накидай еще скажем 127 датасетов (для круглого счета), скомпили, посмотри размер. ну. выгадал чтонибудь?

Reindeer Moss Eater ©   (30.05.07 09:30) [13]
> Из любого хмл с помощью трансформа можно получить датапакет совместимый с ClientDataSet.
а из любого dbf файла легко с помощью Datapump можно получить совместимый с парадоксовым движком... но это же не делает его "совместимым" и "универсальным" (во всяком случае не слышал чтобы такое про него ктото говорил). при том что по дополнению в [12] проблем с совместимостью судя по всему не будет, он сам их создает а не получает по случаю, как было подумал.
другой вопрос, нафига это использовать если нужна база?


Reindeer Moss Eater   (2007-05-30 09:30:00) [13]

xml xml-ю рознь... не верь маркетологам! (они говорят типа универсальный формат...) добытую по случаю xml-лину вряд ли откроешь в ClientDataSet... только если она в нем и создана/такого же формата.

Из любого хмл с помощью трансформа можно получить датапакет совместимый с ClientDataSet. И "таскать с собой" надо не больше чем в случае с mdb


Galiaf   (2007-05-30 09:07:00) [14]

Я попробовал сохранить clientDataSet'ом в формате *.cds, получил файл с крякозябрами который весил 2/3 от xml-евского, даже переписывать ничего не надо, думаю его использовать.
Заметил некрасивость одну, у меня по кнопке "добавить" прописано
cds.append;
panel.visible:=true

по кнопке "Ok" прописаны изменения, а на отмену удаление.
Если курсор в таблице стоит не на последней записи то append не создаёт новую, а только передвигает в конец, при нажатии на отмену получаю удаление последней строки т.к. пустая не была создана.
Делать insert или last перед append?(ваше мнение)
Так же при работе с несколькими таблицами, чтобы не кидать на форму 3 clientDataSet'а, как менять таблицу, просто cds.load* или есть что-то правильнее?


sniknik   (2007-05-30 00:07:00) [15]

> но случай предполагает использовать xml
xml xml-ю рознь... не верь маркетологам! (они говорят типа универсальный формат...) добытую по случаю xml-лину вряд ли откроешь в ClientDataSet... только если она в нем и создана/такого же формата.

> Сам я предпочитаю *.mdb
ну и "предпочитай" дальше, возможностей по сравнению с xml как базой у него гораздо больше, а таскать нужно меньше на одну dll... т.е. не нужно ни одной. (есть варианты конечно когда чегото для него не стоит в винде, но сейчас это скорее исключение чем правило)


Galiaf   (2007-05-29 23:37:00) [16]


> Jan1 ©   (29.05.07 09:43) [7]
>
> Зачем тебе геморой с xml?  Это что передовая СУБД?


А я в базах данных полный 0, и мне нужна была база для которой надо как можно меньше драйвер нести или не нести совсем, я узнал что для xml нужен только midas.dll

Сам я предпочитаю *.mdb, но случай предполагает использовать xml


sniknik   (2007-05-29 10:38:00) [17]

> есть только вывод имеющейся и то только компонентой dbimage
ввод
dbimage.picture.LoadFromFile
dbimage.picture.LoadFromClipboardFormat


Карелин Артем   (2007-05-29 09:45:00) [18]


> sniknik ©   (26.05.07 18:17) [1]

ms SQL 2005, XPath, XQuery


Jan1   (2007-05-29 09:43:00) [19]

Зачем тебе геморой с xml?  Это что передовая СУБД?


Galiaf   (2007-05-29 09:39:00) [20]


> опыт "лежит" в примерах дельфи, надо только его оттуда взять.
> ..

Временем раньше я просматривал демки именно с этой целью но из того что мне надо нашёл только пример FishFact, в котором нет ни слова о сохранении картинки, есть только вывод имеющейся и то только компонентой dbimage.


> Loginov Dmitry ©   (27.05.07 21:20) [5]

Благодарю за пример.


Страницы:   1 2

Наверх

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