powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / классы доступа к firebird
25 сообщений из 29, страница 1 из 2
классы доступа к firebird
    #32386906
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил я написать классы доступа к серверу sql firebird(ну и остальные из этой кучи)

Вообще я их уже начал, но решил сделать их доступными типа в исходниках :-)
Основная мысль, чтобы их функциональность была подобна дельфевым объектам. чтобы лгче было переползать, так сказать.
при этом исходники должны быть межплатформенными. чтоб легко можно было собрать проект под любую платформу. ну, если графики нету. хотя графику можно использовать какуюнибудь типа wxWindows.

Что я реализовал.

TDATABASE
TTRANSACTION
TQUERY

и то, не до конца. хотелось бы услышать мнение людей, какие еще объекты нужно бы добавить, какие методы и свойства у этих объектов должны быть.

я думаю, теперь нужно сделать TFIELD.
От него отнаследовать несколько классов, типа TFIELDVARCHAR, TFIELDFLOAT, TFIELDINTEGER и т.д.

или сделать как в дельфи, функции asString, asFloat, asInteger и т.д.?

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

в общем, мысли и предложения. прошу.
...
Рейтинг: 0 / 0
классы доступа к firebird
    #32387084
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а разве нет OLEDB-провайдера для FB?
...
Рейтинг: 0 / 0
классы доступа к firebird
    #32387098
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть наверное.
а как пользоваться этим провайдером на FreeBSD компилируя при помощи gcc?

я хочу простые, узконаправленные классы, которые не будут работать с тысячей серверов и поддерживать универсальную функциональность. пусть они будут настолько простыми как только можно, но не прощще(с).
kiss рулит
...
Рейтинг: 0 / 0
классы доступа к firebird
    #32387169
Фотография Хрен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вы остановитесь на qt вместо wxwindows то обнаружите что там уже есть data-bounded таблицы/поля и т.д. и обобщенный доступ до баз данных. Через ODBC.

Для FB насколько я помню есть odbc драйвера easysoft-овские и какие-то родные с ibphoenix.
В юниксах через unixodbc, в windows через родной odbc.
...
Рейтинг: 0 / 0
классы доступа к firebird
    #32387280
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я на qt не остановлюсь.
не нравится мне то, что это все-в-одном библиотека.
хочется отдельно иметь классы доступа к firebird и все. только и всего. и не качать хрен знает сколько исходников, которые только компилятся по несколько минут. и не устанавливать по двадцать библиотек плюс свежжайшие утилиты типа gmake а иначе ничего не скомплитися.

просто. просто 5-10 классов, не больше в двух трех хидерах.
...
Рейтинг: 0 / 0
классы доступа к firebird
    #32387345
Фотография Хрен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятно. Тогда я удивлен вашим выбором - wxwindows. Не самая маленькая бибка..
...
Рейтинг: 0 / 0
классы доступа к firebird
    #32387394
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообще я не выбиал wxWindows.
просто, "а вдруг". а вдруг понадобится сделать графическую тулзу под иксы. хотя пока такой работы не предвидится, но "а вдруг".

а вот консольные проги под фришку мне уже очень надо. пишу на яве. а ява, на нашем 166 пне что являет собой шлюз хавает много процентов процессорного времени.
мне это не шибко нравится. да и ставить ее, если что, много места надо.
а у меня сервачек один есть, так там места совсе мало, даже логи не хранятся...
...
Рейтинг: 0 / 0
классы доступа к firebird
    #32388286
Nimble
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Alex_K

Честно говоря я сам думал над похожей проблеммкой. Если не сложно, вышли исходники или хотябы какую-то часть, в образовательных целях. Nimble@pisem.net
Извени за тупой вопрос, но TDATASET тоже нужен, или ты считаешь, что Query можно обойтись?
...
Рейтинг: 0 / 0
классы доступа к firebird
    #32388325
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пока они не примемлемо заработают ничего высылать или выкладывать не буду.
ну чего позорится?

насчет DATASET не вижу пока смысла.
в дельфи этот объект используется для связки с визуальными контролами редактирования и просмотра.
в своих проектах(на делфи) стараюсь использовать его по минимуму, в общем пока реализовывать не имею в планах.

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

еще.
я сделал упрощенно 4 типа данных:
FBTYPE_INTEGER (все целочисленные данные)
FBTYPE_VARCHAR (все строковые данные)
FBTYPE_FLOAT (все числа с плавающей запятой)
FBTYPE_DATETIME (дата и время)

над блобом думаю.
остальные типы остались за гранью моего разума :-)
что думаете?
...
Рейтинг: 0 / 0
классы доступа к firebird
    #32388465
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_k
я чето похожее уже сделал для sybase и пытался перенести на firebird(без одибиси).
на fb мне не понравилось, что нет возможности произвольного доступа к любой записи в запросе, и я бросил эту работу (без одибиси).
только оно вообще не похоже ни на что. -)))
особенно на дельфи.

alex_k>хочется отдельно иметь классы доступа к firebird и все. только и всего

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

то могу дать примеры использования, исходники и
попробовать пообьяснять.
...
Рейтинг: 0 / 0
классы доступа к firebird
    #32388492
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2tchingiz
спасибо, но у меня пока вроде все ясно :-)
давай так, зайду в тупик, обращусь. ок?
...
Рейтинг: 0 / 0
классы доступа к firebird
    #32388533
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гут
>я думаю, теперь нужно сделать TFIELD.

ты собираешься доступаться по полям?

то бишь в программе, которая будет читать запись таблицы,
каждый обьект описывать руками через твои классы
FBTYPE_INTEGER (все целочисленные данные)
FBTYPE_VARCHAR (все строковые данные)
FBTYPE_FLOAT (все числа с плавающей запятой)
FBTYPE_DATETIME (дата и время)
...
Рейтинг: 0 / 0
классы доступа к firebird
    #32388535
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_k>какие методы и свойства у этих объектов должны быть.

а обьекты для полей там тоже есть
;))
...
Рейтинг: 0 / 0
классы доступа к firebird
    #32388538
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну примерно.
все таки я решил сделать чуть-чуть иначе.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
void somefunc(TFBTRANSACTION *trn)
{
  TFBQUERY *q=new TFBQUERY(trn);
  q->sql= "select first 1  * from sometable";
  int someInt=q->fieldByName( "someintfield" )->asInteger();
  string someStr=q->fieldByName( "somestrfield" )-.asString();
  delete q;
}

вот так.
почти работает :-)
...
Рейтинг: 0 / 0
классы доступа к firebird
    #32388539
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл опен сделать :-)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
void somefunc(TFBTRANSACTION *trn)
{
  TFBQUERY *q=new TFBQUERY(trn);
  q->sql= "select * from sometable" ;
  q->open();
  int someInt=q->fieldByName( "someintfield" )->asInteger();
  string someStr=q->fieldByName( "somestrfield" )-.asString();
  delete q;
}
...
Рейтинг: 0 / 0
классы доступа к firebird
    #32388543
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты с одибиси работаешь?
так ты там структуру таблицы разбираешь? в запросе?
а движение по строчкам в запросе как?
и компилятор не найдет не правильно названные поля "somestrfield"
q->fieldByName("somestrfield")-.asString();
...
Рейтинг: 0 / 0
классы доступа к firebird
    #32388555
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет не с odbc.
через gds32.dll
движение по строчка при помощи
next();
prev();
first();
last();
moveBy(int);



и компилятор не найдет не правильно названные поля "somestrfield"
q->fieldByName("somestrfield")-.asString();


а вот этого я вообще не понял...
ты имеешь в виду мою опечатку насчет ->?
...
Рейтинг: 0 / 0
классы доступа к firebird
    #32388721
123456789098
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
опечатка это фигня, каждому поеятно что не переключился на английский ... я так понимаю что tchingiz имел а виду вот такой случай

скажем есть вот такой запрос:
Код: plaintext
1.
SELECT SomeField_1,SomeField_2
FROM SomeTable


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
void somefunc(TFBTRANSACTION *trn)
{
  TFBQUERY *q=new TFBQUERY(trn);
  q->sql= "SELECT SomeField_1,SomeField_2 FROM SomeTable" ;
  int someInt=q->fieldByName( "someintfield" )->asInteger();
  string someStr=q->fieldByName( "SomeField_10" )->asString();
  delete q;
}


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

так вот в полученном запросе поля SomeField_10 не будет, а следовательно
Код: plaintext
string someStr=q->fieldByName( "SomeField_10" )->asString();
является ошибкой, но это задача не компилятора,а твоего класса ...
...
Рейтинг: 0 / 0
классы доступа к firebird
    #32389160
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне кажется это ошибка не компилятора, не класса, а пользователя(программиста).
зачем он обращается к несуществующему полю?
функция fieldByName(string) вернет NULL и обращение к NULL как к TFBFIELD выдаст исключение, которое можно ловить.
в принципе, эту ситуацию можно ловить в самой функции fieldByName(string)
и возвращать указатель на экзэмпляр класса TFBFIELD с пустым содержимым или содержимым по умолчанию.
...
Рейтинг: 0 / 0
классы доступа к firebird
    #32389165
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне кажется это ошибка не компилятора, не класса, а пользователя(программиста).
зачем он обращается к несуществующему полю?
функция fieldByName(string) вернет NULL и обращение к NULL как к TFBFIELD выдаст исключение, которое можно ловить.
в принципе, эту ситуацию можно ловить в самой функции fieldByName(string)
и возвращать указатель на экзэмпляр класса TFBFIELD с пустым содержимым или содержимым по умолчанию.
...
Рейтинг: 0 / 0
классы доступа к firebird
    #32389166
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот глупый эксполорер :-)
...
Рейтинг: 0 / 0
классы доступа к firebird
    #32389878
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
0
да 123456789098

1
не ну конечно ошибка программиста.
как и все остальные ошибки.
-)))))))))

2
неплохо бы переопределить конвертацию полей в соответствующей тип

int i;
FBTYPE_INTEGER ifb;

ifb = 1;

i = ifb;

для ваших примеров, чтото типа такого:

string someStr=q->fieldByName("SomeField_10");



3
и для экспорта - импорта какое-то преобразование записей в строчку и обратно.

4
alex_k
---
gds32.dll

prev();
first();
last();
----
у меня в fb есть долько gds32.lib.
а в руководстве по апи я не нашел передвижение в запросе в обратном порядке.
меня убеждали. что fb, может только сверху вниз позиционировать записи.

это не правда?


5
собственно к таблице обращаешься через sqlda
или в этом gds32.dll есть чтото другое?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
           sqlda = (XSQLDA ISC_FAR *) malloc(XSQLDA_LENGTH( 1 ));
           if (sqlda) {
               sqlda->sqln =  1 ;
               sqlda->sqld =  1 ;
               sqlda->version =  1 ;
               sqlda->sqlvar[ 0 ].sqldata = (char ISC_FAR *)&lint;
               sqlda->sqlvar[ 0 ].sqltype = SQL_LONG +  1 ;
               sqlda->sqlvar[ 0 ].sqlind  = &li;
               sqlda->sqlvar[ 0 ].sqllen  = sizeof(lint);
               rc = isc_dsql_allocate_statement(status, &DB, &stmt);



6
я по описанию таблицы генерировал структуру, которая использовалась для
доступа к таблице.
и в программе к полю обращался как

q->SomeField_10

мои ошибки, связанные с неправильным указанием полей, радостно находил компилятор и меня уведомлял.
естественно код, для обработки этих исключений
(
alex_k>TFBFIELD выдаст исключение, которое можно ловить
)
писать было не надо.
в это время я пил пиво.
/*
хотя это вечная тема, кто лучше компилятор или интрепретатор
-)))))))))))))))))))))))
*/
...
Рейтинг: 0 / 0
классы доступа к firebird
    #32389884
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
неплохо бы переопределить конвертацию полей в соответствующей тип
это да, дело стоящее...

у меня в fb есть долько gds32.lib.
а в руководстве по апи я не нашел передвижение в запросе в обратном порядке.
меня убеждали. что fb, может только сверху вниз позиционировать записи.

это не правда?


это правда. нужно эмулировать. пока думаю при необходимости фетчить. тоесть если ntxt();next();next(); то fetch();fetch();fetch()
а вот если сразу last(); то тогда придется fetchall(); и держать в памяти.


я по описанию таблицы генерировал структуру, которая использовалась для
доступа к таблице.

какая нечеловеческая логика :-)
нет, я думаю а вдруг селккт в рантаме определять захочется?
...
Рейтинг: 0 / 0
классы доступа к firebird
    #32389916
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это я както понимаю про next()
ты лучше колись,
как ты делаешь prev(); prev(); prev()?


>нет, я думаю а вдруг селккт в рантаме определять захочется?

во- первых, эта возможность есть.
для наперед известных таблиц в сгенерированной структуре. а для наперед неизвестных таблиц, я, действительно, буду доступаться по имени поля в кавычках или по порядковому номеру.
;-P

во - вторых, по большому счету для наперед неизвестных таблиц, она мне никогда не была нужна, за всю предыдущую жизнь.

в любом случае, количество кода для известных таблиц существенно больше.
поэтому я ошибки старался убрать пораньше на шаге компиляции.

че про sqlda молчишь?
...
Рейтинг: 0 / 0
классы доступа к firebird
    #32389918
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты лучше колись,
как ты делаешь prev(); prev(); prev()?

че про sqlda молчишь?

да я еще документацию читаю.
у меня только запросы выполняются, а что делать с результатом запроса я пока не знаю :-)

времени не очень много.
щас вот пару часов назад дописал конторский прокси(и то, подглючивает).
потом пописал левый проект пару часиков.
а щас уже спать хочется, да рабочий день скоро, буду отчеты делать для отдела продаж.
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / классы доступа к firebird
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]