Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 30.05.2011, 13:18
Аватар для SpectraL
SpectraL SpectraL вне форума
Начинающий
 
Регистрация: 19.05.2011
Адрес: Санкт-Петербург
Сообщения: 112
Версия Delphi: 10.1 Berlin
Репутация: 10
По умолчанию

Цитата:
Сообщение от Assistant
сделайте запрос в TADOQuery:
Код:
ADOQuery1.SQL.Text := 'тут запрос полный';
ADOQuery1.SQL.SaveToFile('123.txt');
и покажите что у вас в 123.txt
INSERT INTO Tablica (Pole1, Pole2, Pole3, Pole4, Pole5) VALUES (2010.03.05 13:53:23, 45, 56, 86, 24)
Ответить с цитированием
  #17  
Старый 30.05.2011, 13:22
Аватар для SpectraL
SpectraL SpectraL вне форума
Начинающий
 
Регистрация: 19.05.2011
Адрес: Санкт-Петербург
Сообщения: 112
Версия Delphi: 10.1 Berlin
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Ну собственно загрузить в массив можно так:
Код:
Var i: Integer;
    Data: Array of Integer;
begin
 SetLength(Data, AdoQuery1.RecordCount);
 while not AdoQuery1.Eof
 do begin
    Data[i] := AdoQuery1.Fields[2].AsInteger;
    AdoQuery1.Next;
    end;
Меткий ответ, спасибо...
Ответить с цитированием
  #18  
Старый 30.05.2011, 13:26
Аватар для SpectraL
SpectraL SpectraL вне форума
Начинающий
 
Регистрация: 19.05.2011
Адрес: Санкт-Петербург
Сообщения: 112
Версия Delphi: 10.1 Berlin
Репутация: 10
По умолчанию

А запрос на ADOQuery как выполнить?
Ответить с цитированием
  #19  
Старый 30.05.2011, 13:27
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

я же говорил про кавычки, у меня вот так прекрасно работает:
Код:
INSERT INTO Tablica (Pole1, Pole2, Pole3, Pole4, Pole5) VALUES ("2010.03.05 13:53:23", 45, 56, 86, 24)
Цитата:
Сообщение от SpectraL
А запрос на ADOQuery как выполнить?
Код:
ADOQuery1.ExecSQL;
__________________
взялся из неоткуда, ничего не прошу, помогаю просто так
ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя
Ответить с цитированием
  #20  
Старый 30.05.2011, 13:32
Аватар для SpectraL
SpectraL SpectraL вне форума
Начинающий
 
Регистрация: 19.05.2011
Адрес: Санкт-Петербург
Сообщения: 112
Версия Delphi: 10.1 Berlin
Репутация: 10
По умолчанию

С двойным кавычками (или с одинарными) пишет ошибка синтаксиса в инструкции INSERT INTO.
Ответить с цитированием
  #21  
Старый 30.05.2011, 13:37
Аватар для SpectraL
SpectraL SpectraL вне форума
Начинающий
 
Регистрация: 19.05.2011
Адрес: Санкт-Петербург
Сообщения: 112
Версия Delphi: 10.1 Berlin
Репутация: 10
По умолчанию

В общем даже если удалить из таблицы Pole1 (тип дата-время) ошибка синтаксиса остаётся... Кстати базе данных accdb псевдоним присваивать же не надо?
Ответить с цитированием
  #22  
Старый 30.05.2011, 13:41
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

не, не надо, но очень странно что ошибка синтаксиса, кстати, MDB не любит всякие переносы и т.д., но это так, мысли...
__________________
взялся из неоткуда, ничего не прошу, помогаю просто так
ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя
Ответить с цитированием
  #23  
Старый 30.05.2011, 15:30
Аватар для SpectraL
SpectraL SpectraL вне форума
Начинающий
 
Регистрация: 19.05.2011
Адрес: Санкт-Петербург
Сообщения: 112
Версия Delphi: 10.1 Berlin
Репутация: 10
По умолчанию

Так, всё разобрался... Имя поля совпало со служебным словом... Не Pole поле называлось ...
Добавление записи прошло успешно... Таким образом, в моём случае лучше использовать компонент TADOQuery?
Ответить с цитированием
  #24  
Старый 30.05.2011, 15:46
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

ну вы можете использовать один компонент всего: TADOQuery, им прочитаете в массив данные и им же сможете добавлять в базу, но я предпочитаю всё же TADOCommand для запросов вида INSERT, DELETE, UPDATE и т.д.
__________________
взялся из неоткуда, ничего не прошу, помогаю просто так
ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя
Ответить с цитированием
  #25  
Старый 30.05.2011, 15:54
Аватар для SpectraL
SpectraL SpectraL вне форума
Начинающий
 
Регистрация: 19.05.2011
Адрес: Санкт-Петербург
Сообщения: 112
Версия Delphi: 10.1 Berlin
Репутация: 10
По умолчанию

Мне нужно наиболее эффективное решение... то есть чтобы меньше нагрузки на компьютер было и меньше лишних деталей в программе. В случае TADOCommand нужно будет ещё использовать TADOTable?
Ответить с цитированием
  #26  
Старый 30.05.2011, 15:59
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

TADOCommand служить только для записи данных в базу, удаления или обновления, он не служит для чтения записей, если вы будете использовать для чтения TADOQuery, а для записи TADOCommand - ничего страшного не будет, так же не будет ничего страшного, если вы будете использовать ТОЛЬКО TADOQuery. Одинаково будет.
__________________
взялся из неоткуда, ничего не прошу, помогаю просто так
ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя
Ответить с цитированием
  #27  
Старый 30.05.2011, 16:18
Аватар для SpectraL
SpectraL SpectraL вне форума
Начинающий
 
Регистрация: 19.05.2011
Адрес: Санкт-Петербург
Сообщения: 112
Версия Delphi: 10.1 Berlin
Репутация: 10
По умолчанию

Спасибо Assistant, ответ на главный вопрос считаю найденным.
Ответить с цитированием
  #28  
Старый 04.06.2011, 15:18
Аватар для SpectraL
SpectraL SpectraL вне форума
Начинающий
 
Регистрация: 19.05.2011
Адрес: Санкт-Петербург
Сообщения: 112
Версия Delphi: 10.1 Berlin
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Ну собственно загрузить в массив можно так:
Код:
Var i: Integer;
    Data: Array of Integer;
begin
 SetLength(Data, AdoQuery1.RecordCount);
 while not AdoQuery1.Eof
 do begin
    Data[i] := AdoQuery1.Fields[2].AsInteger;
    AdoQuery1.Next;
    end;
Я тут поэкспериментировал и пришел к следующим результатам: загрузка 18000 записей из CSV-файла в динамический список (вроде динамического массива) занимает около 1 секунды, а загрузка 18000 записей из ACCDB-базы данных в динамический список занимает около 10 секунд. При загрузке из ACCDB-базы данных на выполнение следующего кода уходит около 9 секунд:
Цитата:
while ADOQuery1.Eof = False do
begin
ADOQuery1.Next;
end;
Можно ли процедуру Next заменить чем-нидь более эффективным?

Последний раз редактировалось SpectraL, 04.06.2011 в 15:26.
Ответить с цитированием
  #29  
Старый 06.06.2011, 12:01
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,714
Репутация: 52347
По умолчанию

Нет, заменить не выйдет. А вот ускорить возможно. Я подозреваю, что у вас флаг в запросе стоит clUseClient, и как следствие, он сначала все тянет на клиент а уже потом заполняет массив - вот и пауза большая.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 06.06.2011 в 12:04.
Ответить с цитированием
  #30  
Старый 06.06.2011, 13:32
Аватар для SpectraL
SpectraL SpectraL вне форума
Начинающий
 
Регистрация: 19.05.2011
Адрес: Санкт-Петербург
Сообщения: 112
Версия Delphi: 10.1 Berlin
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Нет, заменить не выйдет. А вот ускорить возможно. Я подозреваю, что у вас флаг в запросе стоит clUseClient, и как следствие, он сначала все тянет на клиент а уже потом заполняет массив - вот и пауза большая.
1. Свойству CursorLocation (которому был присвоен clUseClient) я присвоил clUseServer, верно? Теперь загрузка происходит за 2 секунды.
2. Свойство CursorLocation определяет чтение данных базы с копии (в компоненте ADOQuery) либо в базе данных?
3. А есчо есть варианты по сокращению времени, скажем может быть открытие базы данных только для чтения и прочее?
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:15.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2019

ВКонтакте   Facebook   Twitter