Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2012, 12:39   #11
trafbite
Форумчанин
 
Регистрация: 21.07.2007
Сообщений: 103
По умолчанию

Цитата:
Сообщение от ReportCube Посмотреть сообщение
sqlite3.dll должна находится там же, где и скомпилированное приложение, или в системной папке
Мегареспект! Помогло!

Не очень удобно, что в XE2 .exe приложение компилируется в отдельную папку от .dpr. Возможно как-то сделать, что бы компилировалось все в одну папку, как в D7?
trafbite вне форума Ответить с цитированием
Старый 26.02.2012, 12:43   #12
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

да можно, настройте выходные папки в целях проекта.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 26.02.2012, 12:52   #13
trafbite
Форумчанин
 
Регистрация: 21.07.2007
Сообщений: 103
По умолчанию

Отлично, спасибо, все сделал
trafbite вне форума Ответить с цитированием
Старый 26.02.2012, 16:56   #14
trafbite
Форумчанин
 
Регистрация: 21.07.2007
Сообщений: 103
По умолчанию

Ан нет, рано радовался

Базу создал (сторонним софтом). Открыть то я ее в своем приложении открыл, вот код:

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if opendialog1.Execute then begin
    try
      FBase:=TSQLiteDatabase.Create(OpenDialog1.FileName);
      showmessage('Норм, создали.');
      FBase.GetTableStrings('SELECT name FROM sqlite_master WHERE type="table" ORDER BY name',ComboBox1.Items);
    except
      ShowMessage('Че-то не то!');
    end;
  end;
end;
Только теперь записать не получается. Опять ошибка валится, никак не найду причину - гугл молчит
Вот код записи:
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
  i: integer;
begin

try
  FStmt.SQL :=
    'INSERT INTO [TestTable] ([StringRow], [NumberRow], [DateTimeRow]) VALUES (:str, :int, :date)';
  for i := 0 to 99 do
  begin
    FStmt.ClearParams;
    FStmt.SetParamInt(':int', i);
    FStmt.SetParamText(':str', IntToStr(i));
    FStmt.SetParamDateTime(':date', Now);
    FStmt.PrepareStatement(FStmt.SQL);
    FStmt.ExecQuery();
  end;
finally
  FBase.Commit;
end;

end;
А вот и сама ошибка:


Пните, пожалуйста, в нужную сторону!
Изображения
Тип файла: jpg error.jpg (30.2 Кб, 153 просмотров)
trafbite вне форума Ответить с цитированием
Старый 26.02.2012, 23:23   #15
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

насколько я понимаю, Вы банально забыли создать объект FStmt


p.s. и, кстати, ещё по вашему коду (на будущее). я не уверен, что параметры нужно описывать через двоеточие.
в Delphi принято для параметров использовать "собаку" @, впрочем, ничего не утверждаю, возможно данные компоненты принимают параметры через двоеточия...

Последний раз редактировалось Serge_Bliznykov; 26.02.2012 в 23:26.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.02.2012, 19:08   #16
trafbite
Форумчанин
 
Регистрация: 21.07.2007
Сообщений: 103
По умолчанию

Serge_Bliznykov, помогло, спасибо за наводку!
Но у меня опять проблема, никак не справлюсь.
Теперь после старта записи (всего 100 строк - занимает порядка 4-5 секунд, это нормально? ) выкидывает такую ошибку:

Хотя запись происходит, данные в таблицу заносятся - проверял сторонним софтом. В чем я опять не прав?
Изображения
Тип файла: jpg error.jpg (28.1 Кб, 148 просмотров)
trafbite вне форума Ответить с цитированием
Старый 28.02.2012, 03:38   #17
rdama
Форумчанин
 
Аватар для rdama
 
Регистрация: 25.07.2009
Сообщений: 533
По умолчанию

На фиг это FBase.Commit;
Маразм крепчал. Еноты пели...
R-style Dataknowlege Access Member Account (RDAMA)
rdama вне форума Ответить с цитированием
Старый 28.02.2012, 07:48   #18
trafbite
Форумчанин
 
Регистрация: 21.07.2007
Сообщений: 103
По умолчанию

Опять же, с одного из блогов по Delphi.
Если без него, то:
Цитата:
Медленно. Попробуем ускорить процесс. Дописываем в обработчик следующий код:
Код:
Base.BeginTransaction;
  try
  for i := 0 to 999 do
  begin
    [...]
  end;
  finally
    Base.Commit;
  end;
Цитата:
Менее 1 секунды на запись 1000 элементов. Неплохо? Транзакции в SQLite рулят =)
Блин, пропустил Base.BeginTransaction; - сам виновать!
Спасибо за помощь!
trafbite вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при создании TclientDataSet antka БД в Delphi 1 03.01.2012 21:38
Ошибка при создании БД alt5000 PHP 12 26.11.2011 18:46
Ошибка при создании Базы Данных YaMolekula C/C++ Базы данных 3 31.10.2011 16:03
застрял при создании базы Andruxa28 Microsoft Office Access 1 10.12.2009 12:35
Interbase ошибка при создании базы Алёна БД в Delphi 13 10.02.2008 16:45