Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как можно создать ADOTable из ADOQuery 
:(
    Опции темы
Serebrus
Дата 2.9.2007, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 333
Регистрация: 22.5.2007
Где: Ташкент

Репутация: нет
Всего: нет



Всем привет.
Пожалуйста помогите решить один вопрос:
Как можно создать ADOTable из ADOQuery, т.е. надо или создать, или скопировать данные
ADOQuery в ADOTable.
Сам пробовал таким путем:

Цитата

ADOQuery.First;
for i:=1 to ADOQuery.RecordCount do
 begin
  ADOTable.Append;
  ADOTable.FieldByName('name').AsString:=ADOQuery.FieldByName('name').AsString;
  ADOTable.FieldByName('fam').AsString:=ADOQuery.FieldByName('fam').AsString;
  ADOQuery.Next;
 end;


Но этот путь невозможно употребить при большой количестве записей?!  smile 

Это сообщение отредактировал(а) Serebrus - 2.9.2007, 09:54
PM MAIL   Вверх
Anark1
Дата 2.9.2007, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 622
Регистрация: 15.12.2006
Где: RF -> Moscow

Репутация: 1
Всего: 11



Зачем такое нужно, если не секрет?
Почему это не возможно?


--------------------
Enjoy yourself, still you can...;)

user posted image

user posted image
PM MAIL ICQ   Вверх
Rodman
Дата 2.9.2007, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



Цитата(Serebrus @  2.9.2007,  09:49 Найти цитируемый пост)
Но этот путь невозможно употребить при большой количестве записей?!

c чего взял???

Код

ADOQuery.First;
while not ADOQuery.Eof do
 begin
  ADOTable.Append;
  ADOTable.FieldByName('name').AsString:=ADOQuery.FieldByName('name').AsString;
  ADOTable.FieldByName('fam').AsString:=ADOQuery.FieldByName('fam').AsString;
  ADOTable.Post;
  ADOQuery.Next;
 end;

а так?
PM MAIL WWW Skype GTalk YIM MSN   Вверх
ALeXandrK
Дата 2.9.2007, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 342
Регистрация: 31.1.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 6



Смотри метод Clone smile 

Это сообщение отредактировал(а) ALeXandrK - 2.9.2007, 15:49


--------------------
Богат не/ни тот, у кого много, а тот, кому хватает
PM WWW   Вверх
Anark1
Дата 2.9.2007, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 622
Регистрация: 15.12.2006
Где: RF -> Moscow

Репутация: 1
Всего: 11



Rodman,
если известно конечное значение счетчика, то предпочтительнее использовать for, нежели while и repeat. Других отличий от исходного кода я не заметил.


--------------------
Enjoy yourself, still you can...;)

user posted image

user posted image
PM MAIL ICQ   Вверх
Esperito
Дата 2.9.2007, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 2.9.2007

Репутация: 2
Всего: 3



А можно поинтересоваться, зачем вообще перегонять записи средствами клиента?
PM MAIL   Вверх
Zero
Дата 2.9.2007, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(Rodman @  2.9.2007,  12:29 Найти цитируемый пост)
Цитата(Serebrus @  2.9.2007,  09:49 )
Но этот путь невозможно употребить при большой количестве записей?!


c чего взял???


код Pascal/Delphi

ADOQuery.First;
while not ADOQuery.Eof do
 begin
  ADOTable.Append;
  ADOTable.FieldByName('name').AsString:=ADOQuery.FieldByName('name').AsString;
  ADOTable.FieldByName('fam').AsString:=ADOQuery.FieldByName('fam').AsString;
  ADOTable.Post;
  ADOQuery.Next;
 end;

а так? 

Работать оно будет, но если записей много, то заклебёшся ждать пока всё выполнится.

Если вспомнить основы языка SQL, то это язык манипулирования данными из БД. и в случае с автором темы состав квери определялся как запрос на выборку данных. (т.е. Select ....)
А в данном случае нужно пользоватся не выборкой, а вставкой записей, т.е. более подробное описание поищи в инете по INSERT INTO и как это применять на практике.

Добавлено через 6 минут и 44 секунды
Цитата(Anark1 @  2.9.2007,  20:49 Найти цитируемый пост)
Rodman,
если известно конечное значение счетчика, то предпочтительнее использовать for, нежели while и repeat. Других отличий от исходного кода я не заметил.

Предпочтительнее если известно что количество элементов цикла, не превышает максимальное значение счётчика цикла. Т.е. если переменная счётчика цикла будет типа integer, то максимальное число которое можно будет поставить в секция условия остановки это 32767. Если записей будет хоть на одну больше, то выскочит run time ошибка. smile 

Это сообщение отредактировал(а) Zero - 2.9.2007, 21:51
PM MAIL ICQ   Вверх
Anark1
Дата 2.9.2007, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 622
Регистрация: 15.12.2006
Где: RF -> Moscow

Репутация: 1
Всего: 11



Цитата(Zero @ 2.9.2007,  21:49)
Добавлено @ 21:56
Цитата(Anark1 @  2.9.2007,  20:49 Найти цитируемый пост)
Rodman,
если известно конечное значение счетчика, то предпочтительнее использовать for, нежели while и repeat. Других отличий от исходного кода я не заметил.

Предпочтительнее если известно что количество элементов цикла, не превышает максимальное значение счётчика цикла. Т.е. если переменная счётчика цикла будет типа integer, то максимальное число которое можно будет поставить в секция условия остановки это 32767. Если записей будет хоть на одну больше, то выскочит run time ошибка. smile

Если количество перегоняемых записей будет больше чем 32767, то данный способ не просто нерационален  smile . Он ужасен.

Добавлено через 8 минут и 5 секунд
А еще было бы полезно узнать что за БД ?
И вообще если проблема заключается в переносе записей с локальной БД на сервер, то ответ лежит тут :
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=21305


--------------------
Enjoy yourself, still you can...;)

user posted image

user posted image
PM MAIL ICQ   Вверх
ALeXandrK
  Дата 2.9.2007, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 342
Регистрация: 31.1.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 6



Зачем тут вообще циклы?! smile 

Тут нужна всего одна строчка:
Код

  ADOTable.Clone(ADOQuery);




--------------------
Богат не/ни тот, у кого много, а тот, кому хватает
PM WWW   Вверх
Anark1
Дата 2.9.2007, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 622
Регистрация: 15.12.2006
Где: RF -> Moscow

Репутация: 1
Всего: 11



ALeXandrK, 
сам то пробовал Clone(ADOQuery) ?

посмотри вопрос и нижний комментарий

http://www.delphikingdom.com/asp/answer.asp?IDAnswer=13572


--------------------
Enjoy yourself, still you can...;)

user posted image

user posted image
PM MAIL ICQ   Вверх
ALeXandrK
Дата 2.9.2007, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 342
Регистрация: 31.1.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 6



Сам не пробовал smile  Что ж вы сразу не написали, что он не копирует(клонирует)... получается, 
что это функция создания "сеамского близнеца".
Я то как раз и использую INSERT INTO в подобных ситуацияхsmile 

Это сообщение отредактировал(а) ALeXandrK - 2.9.2007, 23:03


--------------------
Богат не/ни тот, у кого много, а тот, кому хватает
PM WWW   Вверх
SergeBS
Дата 3.9.2007, 07:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: 11
Всего: 22



Serebrus, 
Код

ADOQuery.SQL.Clear;
ADOQuery.SQL.Add('select * into newtable from oldtable');
ADOquery.Open;                 //и данные вообще-то уже доступны в новой таблице
ADOTable.TableName := 'newtable';
ADOTable.Open;

Могу быть неточным - ADOTable не пользуюсь и не советую пользоваться. Но примерно - так.
ADO = SQL. Поэтому колбасить "по-dbf-ному" - иметь жуткие тормоза и проблемы с полями значений null.
PM MAIL   Вверх
ALeXandrK
Дата 3.9.2007, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 342
Регистрация: 31.1.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 6



Я бы чуть укоротил код:
Код

ADOQuery.SQL.Text := 'select * into newtable from oldtable';
ADOquery.Open;                 //и данные вообще-то уже доступны в новой таблице
ADOTable.TableName := 'newtable';
ADOTable.Open;


И вообще, если тут таблица нужно только в RunTime, то я бы воспользовался
услугами TADODataSet| TADOStoredProc | TADOCommand.

Я бы на твоем месте (да и на своем) поступил бы так:
все RunTime запросы я бы составил в Access, а потом просто вызывал бы их с помощью TADOStoredProc.
Что это дает: ты можешь проверить результаты запроса незапуская программу. Согласись, что проверять
правильность запроса с помощью программы намного неудобнее, чем в Access. smile 


Это сообщение отредактировал(а) ALeXandrK - 3.9.2007, 13:15


--------------------
Богат не/ни тот, у кого много, а тот, кому хватает
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0875 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.