![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SQL запросы в XML через ClientDataSet
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]
Благодарю за пример.