Текущий архив: 2007.10.14;
Скачать: CL | DM;
Вниз
Работа с TAdoQuery Найти похожие ветки
← →
исследователь © (2007-09-16 12:42) [0]Помогите, пожалуйста - как сохранить содержимое TADOQuery в файл? Не просто текстовый, а именно во временную таблицу.
← →
Anatoly Podgoretsky © (2007-09-16 12:47) [1]> исследователь (16.09.2007 12:42:00) [0]
А файл тогда причем?
← →
Сергей М. © (2007-09-16 12:49) [2]Самое простое - организовать цепочку TADOQuery <- TDataSetProvider <- TClientDataSet. Тогда требуемое сохранение осуществляется простым вызовом метода TClientDataSet.SaveToFile
← →
исследователь © (2007-09-16 12:56) [3]1:
Таблица - это тоже файл, вы не согласны?
2: Это что точнее нужно сделать?
← →
Anatoly Podgoretsky © (2007-09-16 12:58) [4]> исследователь (16.09.2007 12:56:03) [3]
Конечно не согласен.
← →
исследователь © (2007-09-16 13:01) [5]
> Anatoly Podgoretsky © (16.09.07 12:58) [4]
имелось ввиду ее физическое представление на ЖД. Впрочем, не хочу бессмысленного флейма. Лучше подскажите, как организовать предложенную в [2] связь
← →
Сергей М. © (2007-09-16 13:05) [6]
> исследователь © (16.09.07 13:01) [5]
> ее физическое представление на ЖД
Именно физическое представление таблицы на ЖД и не обязано ассоциироваться с отдельным файлом.
> как организовать предложенную в [2] связь
Справку уже проштудировал ?
← →
исследователь © (2007-09-16 13:07) [7]
> Именно физическое представление таблицы на ЖД и не обязано
> ассоциироваться с отдельным файлом.
хорошо, хорошо
> Справку уже проштудировал ?
если честно, Using ... ничего не дало. Может, тыкнете, где надо и что надо?
← →
Anatoly Podgoretsky © (2007-09-16 13:08) [8]> исследователь (16.09.2007 13:01:05) [5]
Например есть база на Акцесс, пишем в ее файл и больше нет базы.
Кроме того понятия файл и база находятся на разных сторонах ринга.
← →
исследователь © (2007-09-16 13:10) [9]я вообще про одну табличку говорил)
← →
Сергей М. © (2007-09-16 13:14) [10]На форме кроме собственно ADOQuery должны присутствовать компоненты DataSetProvider и ClientDataSet из закладки "Data Access".
Далее настраиваешь:
DataSetProvider.Name <- ClientDataSet.ProviderName
ADOQuery <- DataSetProvider.DataSet
← →
исследователь © (2007-09-16 13:19) [11]а если у меня еще и DataSource на форме, и DBGrid? Как их свойства перенастроить?
← →
Сергей М. © (2007-09-16 13:22) [12]
> исследователь © (16.09.07 13:19) [11]
"Перенастроить" на что и зачем ?
Чем не устраивают текущие их настройки ?
← →
исследователь © (2007-09-16 13:22) [13]Перенастройку понял. Но вот сохранение не проходит.
← →
исследователь © (2007-09-16 13:22) [14]
> Чем не устраивают текущие их настройки ?
да я случайно поменял
← →
Сергей М. © (2007-09-16 13:23) [15]
> сохранение не проходит
Что, так и говорит, мол, "не прохожу" ?)
← →
исследователь © (2007-09-16 13:25) [16]просто не сохраняет, ошибки никакие не выводятся. Сохраняю как CDS.SaveToFile("temp.dbf");
← →
Anatoly Podgoretsky © (2007-09-16 13:25) [17]Интересно на сколько сотен сообщения терпения хватит.
← →
исследователь © (2007-09-16 13:27) [18]А в чем дело? Я сделал что-то неверно?
← →
Сергей М. © (2007-09-16 13:29) [19]
> temp.dbf
С какого перепугу dbf ?
← →
исследователь © (2007-09-16 13:31) [20]А какое, я извиняюсь, расширение, если SELECT с DBF проходит нормально, а сохранить нельзя? Что поставить, .DB? Он тоже не сохранит.
← →
Сергей М. © (2007-09-16 13:35) [21]
> А какое, я извиняюсь, расширение
А по барабану какое)
Но содержимое файла не будет иметь ничего общего в dbf-форматом.
> если SELECT с DBF проходит нормально
Видишь ли, компоненту ADOQuery глубоко фиолетово, откуда он получил НД - то ли из DBF, то ли еще откуда-либо. За это отвечает ADOConnection. И ни DataSetProvider ни тем более ClientDataset ничего не знают и знать не обязаны ни про какие ADOConnection - они оперируют на уровне DataSet.
← →
исследователь © (2007-09-16 13:38) [22]Так а если мне надо сохранить таблицу временную, и уже пофиг в каком формате - главное чтоб потом adoquery смог сделать из нее select - что делать надо? Я об этом и спрашивал с самого начала!
← →
sniknik © (2007-09-16 13:41) [23]Сергей М. © (16.09.07 12:49) [2]
> Самое простое - организовать цепочку TADOQuery <- TDataSetProvider <- TClientDataSet. Тогда требуемое сохранение осуществляется
> простым вызовом метода TClientDataSet.SaveToFile
нет, самое простое организовать цепочку TADOtDataSet (конец цепочки), тогда требуемое сохранение осуществляется простым вызовом метода TADOtDataSet.SaveToFile...
← →
Сергей М. © (2007-09-16 13:43) [24]
> Я об этом и спрашивал с самого начала
Где ?!
Ты спросил лишь как сохранить НД в файл, а что ты с ним потом собрался делать с этим файлом - то нам было неведомо вплоть до [22])
> главное чтоб потом adoquery смог сделать из нее select
Зачем ?
Раз ClientDataset сохранил НД в файл, то очевидно что он может и прочитать впоследствии этот файл. См. TClientDataset.LoadFromFile.
← →
исследователь © (2007-09-16 13:43) [25]черт. Мне уже не до простоты (внимание, слово написано верно :) ). Просто помогите - 1) не сохраняет ничего 2) можно ли это потом будет использовать в sql-запросе?
← →
sniknik © (2007-09-16 13:44) [26]> главное чтоб потом adoquery смог сделать из нее select - что делать надо?
надо писать в базу а не файл, в базу с движком который может выполнить select.
> Я об этом и спрашивал с самого начала!
неееет, ты опрашивал совсем не о том, а о просто сохранении в файл/таблицу. без упоминания возможности работы с ней sql-ем.
← →
Сергей М. © (2007-09-16 13:44) [27]
> sniknik © (16.09.07 13:41) [23]
Ну да).. А завтра он заменит этот TADODataSet на еще каую-нть хрень, а там нет такой функциональности)
← →
исследователь © (2007-09-16 13:44) [28]Ну теперь вот ведомо. SELECT будет нужен, так как из врем. таблицы будет много разных выборок, причем с возможностью показать и таблицу в начальном виде.
← →
Сергей М. © (2007-09-16 13:47) [29]
> SELECT будет нужен, так как из врем. таблицы будет много
> разных выборок, причем с возможностью показать и таблицу
> в начальном виде
Накой ляд тебе этот SELECT, если ClientDataset имеет св-во OnFilterRecord ?
← →
Anatoly Podgoretsky © (2007-09-16 13:48) [30]> sniknik (16.09.2007 13:44:26) [26]
Где ни будь к сотому посту, мы это узнаем.
← →
исследователь © (2007-09-16 13:49) [31]Не ругайтесь, пожалуйста. Вообще-то это событие.
← →
sniknik © (2007-09-16 13:50) [32]> Просто помогите
просто помочь очень не просто... особенно если тот кому помогают сам не знает что делает. (либо скрывает, что для помогающего одно и тоже)
> 1) не сохраняет ничего
у тебя ошибка в 17й строке
> 2) можно ли это потом будет использовать в sql-запросе?
а то! просто найди sql движок принимающий xml таблицы (возможно и есть такой), и при SaveToFile задай параметр выгружать в xml.
← →
исследователь © (2007-09-16 13:51) [33]Хотя я его и не нашел)
← →
Сергей М. © (2007-09-16 13:52) [34]
> Вообще-то это событие
Вообще-то это именно свойство)
> Хотя я его и не нашел
Мыши съели ?
← →
Сергей М. © (2007-09-16 13:53) [35]
> Вообще-то это именно свойство
.. фигурирующее в справке как Event
← →
исследователь © (2007-09-16 13:53) [36]в написании не ошиблись?
не съели.
Код давать?
← →
Сергей М. © (2007-09-16 13:56) [37]
> в написании не ошиблись?
Нет.
> Код давать?
Давно пора)
← →
исследователь © (2007-09-16 13:58) [38]
procedure FillList;
- заполнение списка подстанций
begin
with frmMain do
begin
cb.Items.Clear;
while not Q.Eof do
begin
if cb.Items.IndexOf(Q.Fields[2].asstring)=-1 then
cb.Items.Add(Q.FIelds[2].AsString);
Q.Next;
end;
chdir(ExtractFilePath(Application.ExeName)+"..\data\");
CDS.SaveToFile("temp.bugoga");
gb.Enabled := True;
end;
end;
часть выборки данных:
b:=false;
for i:=0 to cb.Items.Count-1 do
if cb.Checked[i] then begin b:=true;break;end;
if not b and (not cbSDate.Checked) then begin
sSQL := "Select * from temp.dbf";
showmessage(ssql);
DBRoutines(sSQL);
exit;
end;
if not b and cbSDate.Checked then
begin
sSQL := "Select * from temp.dbf"+
" where DATE>=#"+SQL_DATE_STRING(dtpFD.date)+"#"+
" AND FILD39<=#"+SQL_DATE_STRING(dtpTD.Date)+"#";
showmessage(ssql);
DBRoutines(sSQL);
exit;
end;
хлам:function SQL_Date_String(Date: TDate): string;
var
OldFormat: string;
ResultStr: string;
begin
if Date > 0 then
begin
OldFormat := ShortDateFormat;
ShortDateFormat := "yyyy/mm/dd";
ResultStr := DateToStr(Date);
ShortDateFormat := OldFormat;
ResultStr[5] := "/";
ResultStr[8] := "/";
Result := ResultStr
end
else
Result := "";
// showmessage(result); - проверка преобразованной даты
end;
procedure DBRoutines(s:string);
begin
with frmMain do
begin
q.Close;
q.SQL.Clear;
q.SQL.Add(s);
q.Open;
end;
end;
Q - TADOQuery, CDS - ClienDataSet, cbSDate - флажок, позволяющий искать по дате. В таблице дата - это два поля, структура таблиц корявая
← →
исследователь © (2007-09-16 14:01) [39]полный код: http://slil.ru/24861476
← →
Сергей М. © (2007-09-16 14:03) [40]из всего этого хлама наиболее интересны всего лишь две строчки:
chdir(ExtractFilePath(Application.ExeName)+"..\data\");
СDS.SaveToFile("temp.bugoga");
Если исключения не было, то файл temp.bugoga обязан быть создан по указанному пути с указанным именем и расширением.
← →
исследователь © (2007-09-16 14:06) [41]исключения НЕ было.
← →
Сергей М. © (2007-09-16 14:06) [42]
> исключения НЕ было
Значит файл создан.
← →
исследователь © (2007-09-16 14:11) [43]Его нет.
Хорошо, как воспользоваться фильтрацией?
← →
Сергей М. © (2007-09-16 14:12) [44]
> Его нет
Должен быть. Делай сквозной поиск по диску.
> как воспользоваться фильтрацией?
В справке к OnFilterRecord есть пример.
← →
Сергей М. © (2007-09-16 14:14) [45]И к ChDir тоже есть справка.
Исключения на ChDir может и не возникнуть, если у тебя {$I+}
← →
Сергей М. © (2007-09-16 14:15) [46]Исследовать методом псевдонаучного тыка, конечно, интересно и познавательно, но крайне непродуктивно)
← →
Anatoly Podgoretsky © (2007-09-16 14:16) [47]> Сергей М. (16.09.2007 14:03:40) [40]
Эти две строчки представляют интерес только с позиции как не надо писать.
← →
Сергей М. © (2007-09-16 14:17) [48]
> Anatoly Podgoretsky © (16.09.07 14:16) [47]
Эт точно)
← →
Сергей М. © (2007-09-16 14:18) [49]
> исследователь
Ты сам-то понял, что ты написал в кач-ве параметра вызова ChDir ?
← →
исследователь © (2007-09-16 14:19) [50]Понял.
bin
PMain.exe
source
исходники
data
таблицы
Вопросы?
← →
Anatoly Podgoretsky © (2007-09-16 14:19) [51]Вот уже и фильтрация выползла.
Кстати устойчиво идем к обещеной сотне постов.
Пол задачи уже выполнили.
← →
Сергей М. © (2007-09-16 14:21) [52]Вопрос пока один
> bin
> PMain.exe
> source
> исходники
> data
> таблицы
Эт чего такое ?)
← →
Сергей М. © (2007-09-16 14:24) [53]Если тебе треба сделать текущей директорию data, в то время как текущей является директория bin, то пляски с бубном вокруг Application.ExeName совершенно необязательны - достаточно ChDir("..\data")
← →
исследователь © (2007-09-16 14:26) [54]Пытался показать дерево папок)
Спс, возьму на заметку. Результат, впрочем, не меняется
← →
Сергей М. © (2007-09-16 14:27) [55]ты сделал скв.поиск файла по всем носителям ?
← →
исследователь © (2007-09-16 14:28) [56]Почему это?
← →
Сергей М. © (2007-09-16 14:29) [57]
> Почему это?
Что "это" и что "почему" ?)
← →
исследователь © (2007-09-16 14:35) [58]
> ты сделал скв.поиск файла по всем носителям ?
← →
Anatoly Podgoretsky © (2007-09-16 14:36) [59]> Сергей М. (16.09.2007 14:24:53) [53]
Не надо использовать ChDir совсем и тем более в приведеной реализации.
← →
Сергей М. © (2007-09-16 14:38) [60]
> исследователь © (16.09.07 14:35) [58]
Файл был создан, но не там где ты ожидал его увидеть.
Потому и предлагаю тебе воспользоваться сквозным его поиском по всем носителям, после чего сделать выводы, почему он оказался не там где ты ожидал.
← →
Сергей М. © (2007-09-16 14:40) [61]
> Anatoly Podgoretsky © (16.09.07 14:36) [59]
Да фиг с ним, с ChDir"ом)
Файл-то создан)
← →
исследователь © (2007-09-16 14:40) [62]Понял. А я уже шукал по сорцу де у меня сквозной поиск
← →
Сергей М. © (2007-09-16 14:42) [63]
> А я уже шукал по сорцу де у меня сквозной поиск
Ты еще в чулане пошукай)
← →
исследователь © (2007-09-16 14:43) [64]нет у меня чулана)
← →
Anatoly Podgoretsky © (2007-09-16 14:50) [65]> Сергей М. (16.09.2007 14:40:01) [61]
Правильно создан, а автор недоволен.
← →
Anatoly Podgoretsky © (2007-09-16 14:52) [66]Если бы автор не опубликовал свою ветку сразу здесь, то она все равно оказалась бы тут.
← →
исследователь © (2007-09-16 14:54) [67]Анатолий, мы, к сожалению, не на коммунити фанов башорга, иначе Вас бы уже я представил как унылые продукты жизнедеятельности и сравнил бы с некоторыми частями организма, но вы меня достали. Я сделал все через UNION SELECT, т.к. выборка во врем. таблицу должна была бы идти из многих таблиц.
← →
Anatoly Podgoretsky © (2007-09-16 14:57) [68]> исследователь (16.09.2007 14:54:07) [67]
Теперь еще и UNION SELECT появился.
← →
исследователь © (2007-09-16 14:59) [69]Ога.
← →
sniknik © (2007-09-16 15:20) [70]а где в коде передача данных в клиентский рекордсет? ну типа open...
← →
sniknik © (2007-09-16 15:25) [71]Сергей М. © (16.09.07 13:44) [27]
> Ну да).. А завтра он заменит этот TADODataSet на еще каую-нть хрень, а там нет такой функциональности)
с тем же успехом он может заменить клиентский на какуюто хрень, а там нет такой функциональности.
и?
имхо - используешь чтото используй его возможности пока можно, не меняй на всякую хрень. а заменил то и используй хреновые возможности...
← →
Джо © (2007-09-16 15:37) [72]> [66] Anatoly Podgoretsky © (16.09.07 14:52)
> Если бы автор не опубликовал свою ветку сразу здесь, то
> она все равно оказалась бы тут.
Первоначально была в «Начинающих».
← →
исследователь © (2007-09-16 15:40) [73]
> Первоначально была в «Начинающих».
брехня
← →
Сергей М. © (2007-09-16 16:33) [74]
> брехня
А оттуда и следовало бы.
Там же и мост в потрепаловку.
> Я сделал все через UNION SELECT
В контексте вопроса - абракадабрища)
← →
фуке (2007-09-16 18:31) [75]Надо просто использовать оператор INSERT с указанием имени таблицы. Туда же и select можно вставить.
При чем здесь файл непонятно
← →
Сергей М. © (2007-09-16 18:35) [76]
> Надо просто использовать оператор INSERT с указанием имени
> таблицы. Туда же и select можно вставить
Архиценный совет)
Туда же смазав можно и UPDATE с DELETE вставить)
← →
Anatoly Podgoretsky © (2007-09-16 18:41) [77]> Сергей М. (16.09.2007 18:35:16) [76]
Все приехали, на этом операторы манипуляции с данными закончены.
← →
Германн © (2007-09-16 18:50) [78]
> Anatoly Podgoretsky © (16.09.07 18:41) [77]
Как это всё?
Обещано было не менее сотни сообщений! :-)
← →
фуке (2007-09-16 18:51) [79]Что смешного?
Например
INSERT INTO table (SELECT * FROM table2 WHERE ... )
← →
Anatoly Podgoretsky © (2007-09-16 18:53) [80]> Германн (16.09.2007 18:50:18) [78]
Сообщения сами по себе, а команды SQL сами по себе.
Мухи отдельно, котлеты отдельно.
← →
Anatoly Podgoretsky © (2007-09-16 18:53) [81]> фуке (16.09.2007 18:51:19) [79]
А смешное, что здесь файл не наблюдается
← →
isasa © (2007-09-16 19:17) [82]Тупо рулит пара
TADOQuery.SaveToFile(<FileName>, <TPersistFormat>) <-> TADOQuery.LoadFromFile(<FileName>)
где,
type TPersistFormat = (pfADTG, pfXML);
Модно, все видно и можно с данными руками извращаться ... :)
← →
фуке (2007-09-16 19:21) [83]2 Anatoly Podgoretsky
Не смешно. Он же спрашивал:
а именно во временную таблицу.
исследователь © (16.09.07 13:38) [22]
главное чтоб потом adoquery смог сделать из нее select - что делать надо? Я об этом и спрашивал с самого начала!
← →
isasa © (2007-09-16 20:18) [84]А что, именно TADOQuery(TADODataSet) делает SELECT ..., а TADOStoredProc компилирует и выполняет хранимую процедуру?
← →
MsGuns © (2007-09-17 09:46) [85]И все же.. где в [38] связь между адошным датасетом и CDS ?
Кроме того непонятно, если "итоговый" датасет представлен CDS, зачем "бегать" по адошному ?
← →
Сергей М. © (2007-09-17 10:11) [86]
> MsGuns © (17.09.07 09:46) [85]
> где в [38] связь между адошным датасетом и CDS ?
Уповаем на выполнение Автором рекомендаций [2], [10] ?
> зачем "бегать" по адошному ?
Да фиг с ним, пусть "бегает")
На работу CDS.SaveToFile это влиять не должно..
← →
sniknik © (2007-09-17 11:03) [87]> Да фиг с ним, пусть "бегает")
> На работу CDS.SaveToFile это влиять не должно..
как же не должно? влияет. если он "бегает" и работает с адошным, не обрашая внимания, что в клиентском данных нет то и SaveToFile записывать будет нечего (у него там даже структура пустая, не говоря о данных, может быть).
нет, и пофигу, а "бегал" бы по клиентскому сразу бы обратил внимание.
Страницы: 1 2 3 вся ветка
Текущий архив: 2007.10.14;
Скачать: CL | DM;
Память: 0.68 MB
Время: 0.024 c