Поиск:

Ответ в темуСоздание новой темы Создание опроса
> FireBird + Си? Нужна помощь с туториалами.. 
:(
    Опции темы
Kurt
Дата 7.7.2005, 01:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


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

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



Хотелось бы опробовать связку FireBird+Cи (on Linux). Пытаюсь по примерам разобраться с FireBird'овым API, но что-то тяжко.
Может, кто-нибудь знает ссылку, где в виде туториала (или еще как-нить доступно) описано, как общатьсся с FireBird на Си?


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
g-m
Дата 7.7.2005, 07:30 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











http://www.firebirdsql.org/index.php?op=doc&id=userdoc

-------
InterBase 6.0 manuals
-------
API Guide

А лучше скачай все 7 томов...

Что будет не понятно, пиши на nik_x at hotbox.ru
Если будет не сильно в напряг - помогу...
  Вверх
Kurt
Дата 7.7.2005, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


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

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



OK, скачаю. Спасибо. Только чуток позже - сейчас много народу через один модем сидят, мнее просто не дадут такой возможности. smile
..
Может, у кого сохранились собственные поделки и первые шаги на поприще FireBird+Cи?
Было бы очень интересно посмотреть. smile


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
g-m
Дата 8.7.2005, 12:28 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Примерчик - небольшой - лови...
Правда посано под MS VS 98, но под линухои проблем быть не должно...

Код

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ibase.h>
#include "convert.h"

#define ERREXIT(status, rc) {isc_print_status(status); return rc;}

static char isc_tpb[] = {
isc_tpb_version3,
isc_tpb_write,
isc_tpb_concurrency,
isc_tpb_wait};


int main()
{
isc_db_handle db;
isc_tr_handle tr;
isc_stmt_handle stmt;
ISC_STATUS status_vector[20];
XSQLDA *sqlda;
XSQLVAR *sqlvar;

char *UserName = "sysdba";
char *UserPassword = "masterkey";
char *DBName = "c:\\i\\i.fdb";
//char *DBName = "i.fdb";
char sql_stmt[16000];// = "select i, d1, coalesce(vs,'<Null>') from tst";
int dpbLength, sqlcode, i, num_cols;
char dpbBuffer[256], *dpb, *p;
char *nls = "dos866";

char s[64000];
char sp[64000];
short flag0, flag1, flag2, *l, j;
int db_i;
double db_d1;
long fetch_stat;

db=NULL;
tr = NULL;
stmt = NULL;
flag0 = 0;
strcpy(sql_stmt, "select tst from tst order by tst");

sqlda = (XSQLDA*) malloc(XSQLDA_LENGTH(5));
sqlda->version = SQLDA_VERSION1;
sqlda->sqln = 5;
sqlda->sqld = 5;

dpb = dpbBuffer;
*dpb++ = isc_dpb_version1;
*dpb++ = isc_dpb_user_name;
*dpb++ = strlen(UserName);
for (p = UserName; *p;) *dpb++ = *p++;
*dpb++ = isc_dpb_password;
*dpb++ = strlen(UserPassword);
for (p = UserPassword; *p;) *dpb++ = *p++;

*dpb++ = isc_dpb_lc_ctype;
*dpb++ = strlen(nls);
for (p = nls; *p;) *dpb++ = *p++;

dpbLength = dpb - dpbBuffer;

isc_attach_database(status_vector, (short) strlen(DBName), DBName, &db, (short) dpbLength, dpbBuffer);
if (isc_sqlcode(status_vector)) ERREXIT(status_vector, 1);

isc_start_transaction(status_vector, &tr, 1, &db, (unsigned short) sizeof(isc_tpb), isc_tpb);
if (isc_sqlcode(status_vector)) ERREXIT(status_vector, 1);

isc_dsql_allocate_statement(status_vector, &db, &stmt); // in first call
if (isc_sqlcode(status_vector)) ERREXIT(status_vector, 1);

isc_dsql_prepare(status_vector, &tr, &stmt, 0, sql_stmt, SQL_DIALECT_V6, sqlda);
if (isc_sqlcode(status_vector)) ERREXIT(status_vector, 1);

// SQL_TEXT      SQL_VARYING SQL_SHORT SQL_LONG SQL_FLOAT     SQL_DOUBLE    SQL_D_FLOAT
// SQL_TIMESTAMP SQL_BLOB    SQL_ARRAY SQL_QUAD SQL_TYPE_TIME SQL_TYPE_DATE SQL_INT64

sqlda->sqlvar[0].sqldata = (char*) s;
sqlda->sqlvar[0].sqltype = SQL_VARYING + 1;
sqlda->sqlvar[0].sqlind = &flag2;
//s[sqlda->sqlvar[0].sqllen] = '\0';

isc_dsql_execute(status_vector, &tr, &stmt, 1, NULL);
//isc_dsql_execute(status_vector, &tr, &stmt, 1, sqlda);
if (isc_sqlcode(status_vector)) ERREXIT(status_vector, 1);

while ((fetch_stat = isc_dsql_fetch(status_vector, &stmt, 1, sqlda)) == 0)
{
//    s[sqlda->sqlvar[0].sqllen] = '\0';
//    printf("%9d - ", db_i);
//    printf("%s , %d , %d , %s |\n", sqlda->sqlvar[0].sqldata, flag2, sqlda->sqlvar[0].sqllen, s);

l = (short*)&s;
for(j=2;j<*l+2;j++) sp[j-2] = s[j]; sp[j-2] = '\0';
//*sp = *convert(sp, "dos866","win1251");

printf("%d - ", *l); (flag2<0) ? printf("<NULL>\n") : printf("%s\n", sp);
//    printf("%s|\n", sqlda->sqlvar[0].sqldata);
}

if (fetch_stat != 100L) ERREXIT(status_vector, 1);

isc_commit_transaction(status_vector, &tr);
//isc_commit_retaining(status_vector, &tr);
if (isc_sqlcode(status_vector)) ERREXIT(status_vector, 1);

isc_detach_database(status_vector, &db);
sqlcode = isc_sqlcode(status_vector);
printf("SqlCode-Detach-%d\n",sqlcode);
if (status_vector[0] == 1 && status_vector[1]) ERREXIT(status_vector, 1);

free(sqlda);
return(0);
}



 ! 
 

Пользуемся тегами [code=cpp]!
Спасибо.
Chipset.

  Вверх
Kurt
Дата 9.7.2005, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


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

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



Благодарю. Буду разбираться.
Одна просьба.. Если не затруднит, пользуйся тегом [code=cpp] - так код легче читается. smile


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
maddoc
Дата 6.7.2007, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



может кто использовал пример выше?
подскажите как подсоеденится с его помощью к сетевой БД. спасибо.


--------------------
"Безвыходных положений не бывает" (с) Камасутра
PM MAIL   Вверх
Rodman
Дата 6.7.2007, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


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

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



а вот в это строке путь к ней не можешь задать?
Код

char *DBName = "c:\\i\\i.fdb";

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


Опытный
**


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

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



я это понимаю, но как?
я перепробовал уже много вариантов но они не отрабатывают.


--------------------
"Безвыходных положений не бывает" (с) Камасутра
PM MAIL   Вверх
xgm
Дата 5.8.2007, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



2: Kurt тынц
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C++: Базы данных"
chipset

Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах.

Благодарим за понимание.


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

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


 




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


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

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