Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Базы данных > Подключение SQLite 3 к проекту на c++ bulder


Автор: IF 4.11.2009, 16:51
Прочитал темы по sqlite на форуме. 
темки старый, обсуждается старый sqlite. но проблема даже не в версии.

не могу подключить sqlite к проекту на c++ builder в Embarcadero® RAD Studio 2010.
мне необходимо сделать программу, создающую бд и работающую с ней. 

с языком запросов sql знаком. все уперлось в незнание как подключить sqlite3.c и sqlite3.h 
из архива sqlite-amalgamation-3_6_19.zip (скаченного с офф сайта) к проекту 
и начать работать с бд. (хотя бы создать файл бд в той же папке)

(dll за программой таскать не хочу. нужно чтобы все было в 1 файле)
подскажите как это сделать

Автор: jonie 4.11.2009, 17:13
IF, ну "просто добавь воды" - добавь эти файлы в проект и всё будет готово.
рекомендую также посмотреть на проект sqlitepp, это boost надстройка над sqlite, очень даже симпотичная...

Автор: Alexeis 4.11.2009, 17:17
Цитата(IF @  4.11.2009,  15:51 Найти цитируемый пост)
не могу подключить sqlite к проекту на c++ builder в Embarcadero® RAD Studio 2010.

  Говорят через компоненты ZeosDBO можно использовать sqlite нативным для билдера способом (Через DataSource/Query)

Автор: IF 4.11.2009, 17:40
создал чистый проект с++
далее с помощью add to project добавил два файла из архива sqlite3.c и sqlite3.h

добавляю текст из примера в программу. дописываю строку argv[i]="if.db"; чтобы создать бд.

Код

//---------------------------------------------------------------------------

#include <vcl.h>
#include <stdio.h>
#include <sqlite3.h>
#pragma hdrstop

#include "Unit1.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
static int callback(void *NotUsed, int argc, char **argv, char **azColName){
  int i;
  for(i=0; i<argc; i++){
    printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
  }
  printf("\n");
  return 0;
}

int main(int argc, char **argv){
  sqlite3 *db;
  char *zErrMsg = 0;
  int rc;

  if( argc!=3 ){
    fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]);
    exit(1);
  }
  argv[1]="if.db"; ////////////########### имя новой дб
  rc = sqlite3_open(argv[1], &db);
  if( rc ){
    fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
    sqlite3_close(db);
    exit(1);
  }
  rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);
  if( rc!=SQLITE_OK ){
    fprintf(stderr, "SQL error: %s\n", zErrMsg);
    sqlite3_free(zErrMsg);
  }
  sqlite3_close(db);
  return 0;
}


если не обращать внимания на printf, которые здесь не нужны, то в папке с программой должна хотя бы создавать сама бд в виде файла if.db. у меня же нет ничего(

p.s.: забыл добавить. я на с++ не кодил до этого, только на php и delphi. но как работать с бд представляю.

Автор: Anikmar 4.11.2009, 18:55
А функция main что там делает вместе с формами?

Автор: IF 4.11.2009, 19:04
взял с примера.
чувствую пример не совсем под builder)

Автор: Anikmar 4.11.2009, 19:08
Цитата(IF @  4.11.2009,  19:04 Найти цитируемый пост)
взял с примера.
чувствую пример не совсем под builder)

Это уж точно.
Если работаете с формой поместите то, что вы запихали в main в обработчик нажатия какой-нибудь кнопки.
Саму main уберите - в билдере она в другом модуле находится и создается автоматически. Этот модуль называется также как проект.

Автор: IF 4.11.2009, 19:17
так здесь int main(int argc, char **argv){
а у меня на копнку void __fastcall TForm1::Button1Click(TObject *Sender)

Автор: Anikmar 4.11.2009, 19:21
Цитата(IF @  4.11.2009,  19:17 Найти цитируемый пост)
так здесь int main(int argc, char **argv){
а у меня на копнку void __fastcall TForm1::Button1Click(TObject *Sender) 

Ну и?
Что вас смущает не врубаюсь. Какие параметры функциям передать?
Код

rc = sqlite3_open("тут имя БД я так понимаю", &db);
...
rc = sqlite3_exec(db, "тут оператор SQL как я понял", callback, 0, &zErrMsg);


Автор: IF 4.11.2009, 19:31
int argc, char **argv
их куда теперь написать?
если прямо в начале тела функции, то при надатии на кнопку выдается ошибка "access violation....".

Код
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  int argc;
  char **argv;
  sqlite3 *db;
  char *zErrMsg = 0;
  int rc;
  argv[1]="if.db";
  rc = sqlite3_open(argv[1], &db);
}


не работает, выдает ошибку. если убрать char **argv, то не знает argv

Автор: Anikmar 5.11.2009, 00:06
Цитата(IF @  4.11.2009,  19:31 Найти цитируемый пост)
их куда теперь написать?

Выкините их нафиг - они не нужны.

Это параметры командной строки - я так понимаю, вы форму делаете - так что можно без командной строки обойтись.

Я же вам пример уже набросал

rc = sqlite3_open(argv[1], &db);

Это просто указатель на строку

Автор: mrbrooks 5.11.2009, 08:44
Для Билдера можно использовать AnyDAC. 

Хотя я бы использовал dot.Net со всеми вытекающими.  smile 

Автор: Anikmar 6.11.2009, 01:22
Цитата(mrbrooks @  5.11.2009,  08:44 Найти цитируемый пост)
Хотя я бы использовал dot.Net со всеми вытекающими.    

А вытекает там на пару гигов...  smile 

Автор: mrbrooks 6.11.2009, 08:54
Цитата(Anikmar @  6.11.2009,  01:22 Найти цитируемый пост)
А вытекает там на пару гигов...

Зря ты так  smile 

ADO.NET вещь достаточно удобная. А в связке с Hibernate вообще выше всех похвал.

Автор: Anikmar 6.11.2009, 21:00
Цитата(mrbrooks @  6.11.2009,  08:54 Найти цитируемый пост)
Зря ты так   

ADO.NET вещь достаточно удобная. А в связке с Hibernate вообще выше всех похвал. 


Мое ИМХО к расточительству ресурсов всем известно  smile 

Жаден я не в меру!

На самом деле не люблю, когда для работы моей проги нужно дофига дополнительных примочек, которых может не быть на компе пользователя. 

Говорю, жаден я.  smile 

Автор: benefaktor 12.11.2009, 11:25
как подключится к бд с паролем? если просто указывать пароль в connectionstring пишет что database encrypted?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)