Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
2-1190074315
SerJaNT
2007-09-18 04:11
2007.10.14
PHP и MySQL


15-1189598524
Кадровик
2007-09-12 16:02
2007.10.14
Подсчет выходных, предвыходных, праздничных ипредпраздничных дней


2-1190119267
artem779
2007-09-18 16:41
2007.10.14
Internet Explorer


2-1189862117
Cardinalius
2007-09-15 17:15
2007.10.14
Ошибка при создании файла


2-1189747819
artem779
2007-09-14 09:30
2007.10.14
как подключить модуль?