Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

KOLOdbc [Delphi]


Страницы:   1 2

AlexY ©   (2006-05-04 10:21:00) 

Delphi5+KOL 2.35. Подключаю KOLOdbc, в программе объявляю переменную типа PODBCDatabase. Компилятор ругается - Undeclared identifier: 'PODBCDatabase'.


parovoZZ   (2006-06-21 07:40:00) [1]

Дико извиняюсь, но это опять Я.
Ошибка такая: неизвестный тип данных поля User_ID.

Ещё чего.
E.ErrorCode всегда возвращает 0. На ADO я различал: неправильный логин или пароль, нет связи с сервером удалённой базы данных, связь потеряна, отмена вставки триггером ну и т.д. А тот текст, содержащийся в E.Message, юзеру не нужен.
Почему-то через ConnectionString не могу подключиься. ХЗ. На ADO всё замечательно.


parovoZZ   (2006-06-21 07:13:00) [2]

Исчо :)

SQL := 'Select User_ID, Name From Users Where User="' + edLogin + '"';

 try
  Query.SQL.Text := SQL;
  Query.Open;
  User_ID := Query.IField[ 'User_ID' ];// <-- Выпадает в ошибку
  Query.Close;
 except


На ADO всё прекрасно.


parovoZZ   (2006-06-21 04:24:00) [3]

Хм, дохлый номер. А как мне в except что-то ещё засунуть? Вариант

except
 on E : EODBC do
   MessageDlg  (E.Message, mtWarning, [mbOk], 0);
   DB.Disconnect;
   exit;
end;

не проходит.


ECM   (2006-06-14 17:51:00) [4]

on E: EODBC do  MyFunc (...., E.ErrorCode);


parovoZZ   (2006-06-14 17:45:00) [5]

Вот так


try
DB.DSNConnect ();
except
on E: EODBC do  E.ErrorCode
MyFunc (...., E);
end;

?


ECM   (2006-06-14 16:08:00) [6]


> Теперь вопрос  - где его взять? EODBC.ErrorCode?

:))
А может прежде чем задавать глупые вопросы хоть немного подумать?
Да тут он и лежит
except on E: EODBC do
  E.ErrorCode - вот и ошибка. Делай с ней всё, что хочешь (c)

{
 KOLOdbc.pas (c) by Vladimir Kladov, 2005
 11.03.2005, 27.12.2005

 Классы:
   EODBC         - класс для обработки ошибок ODBC
...
type
 EODBC = class( Exception )
 protected
   constructor CreateError( HandleType: SmallInt; fHandle: THandle; ErrCode: SmallInt; const Msg
: String );
 public
   constructor CreateEnvError( fHandle: THandle; ErrCode: SmallInt; const Msg: String );
   constructor CreateConnError( fHandle: THandle; ErrCode: SmallInt; const Msg: String );
   constructor CreateStmtError( fHandle: THandle; ErrCode: SmallInt; const Msg: String );
 end;

далее по тексту везде раскиданы
   raise EODBC.CreateXXXXX;

почитайте про обработку исключений в Delphi - может полегчает


parovoZZ   (2006-06-14 15:46:00) [7]

Посмотрел исходники - есть какой-то класс EODBC, который создаёт что-то своё. Просит ErrCode : SmallInt. Теперь вопрос  - где его взять? EODBC.ErrorCode? Будем попробовать.

ЗЫ на ADO проще ADOConnection.Errors.Get_Item (0).NativeError - вот и ошибка. Делай с ней всё, что хочешь.


parovoZZ   (2006-06-12 01:33:00) [8]

А как отловить ошибку? К примеру о невозможности подключения. Всё, что я имею сейчас, это закрытие проги.


thaddy   (2006-06-11 12:43:00) [9]

2 ECM: borlndmm.dll ofcourse :))


Антибайт   (2006-06-11 00:54:00) [10]

Ну ладно, буду ломать свой внутренний стержень


ECM   (2006-06-10 13:26:00) [11]


> sharemem.dll.

??
:))


thaddy   (2006-06-10 13:24:00) [12]

Or use FastMM4. Is about 10K ballast, but less than sharemem.dll.
If both the Dll and the executable are compiled with the proper fastmm4 flag, there is no need for sharemem and your appication becomes a lot faster and more reliable. Especially in the field of databases.


ECM   (2006-06-10 13:01:00) [13]


> parovoZZ ©   (09.06.06 23:44) [15]
> Дык, никогда не юзал. Придётся изучать.

Не придётся... :)) Это просто специальная версия диспетчера памяти.( Сам диспетчер находится в borlndmm.dll) Он позволяет пользоваться одним и тем же диспетчером как в приложении так и в длл. Т.е. можно смело выделять память например в приложении - а в длл её освобождать. (В противном случае у приложения и длл будет своя копия диспетчера и неизбежны падения).
Специального ничего делать не надо - просто поставьте ShareMem в uses и в приложении и в длл-ке и всё.
:)


Vladimir Kladov   (2006-06-10 08:04:00) [14]

Против параметров есть еще один серьезный аргумент: неудобство автономной отладки запроса. Если текст запроса не содержит параметров, то достаточно сохранить его перед исполнением просто как строковый файл, и можно его отлаживать в том же Query Analyzer'е, оптимизировать, гонять так и сяк. С параметрами (особенно когда их много) процесс усложняется: надо как минимум редактировать весь запрос, прежде чем выполнять.

ADO = sucks. Я не о размерах. Когда я перешел на прямую работу с MS SQL 6.5 через ODBC драйверы, скорость запросов увеличилась, в отдельных случаях - на порядок.

О размерах: какой смысл с маленьким приложением тащить dll на полметра, мучиться с вынесением в dll части кода. Но это ваше решение.


parovoZZ   (2006-06-09 23:44:00) [15]

Дык, никогда не юзал. Придётся изучать.


ECM   (2006-06-09 20:25:00) [16]


> Надо юзать ShareMem. Нет ли в кол решения даного недоразумения?

Ну так и "юзай" его. Кто запрещает?


parovoZZ   (2006-06-09 20:08:00) [17]

Что я тут подумал. Если заморачиваться с dll, то появляется куча проблем. В dll хочу запихнуть ADO компоненты (не хочу переписывать запросы - внутренний моральный стержень не позволяет(с) не помню кто). Но тогда про стринг и двоичные данные произвольной длины можно забыть. Надо юзать ShareMem. Нет ли в кол решения даного недоразумения?


parovoZZ   (2006-06-09 19:14:00) [18]

Неее, мне до Вас как до неба. Посмотрел исходники...мама рОдная, роди меня обратно.
Скорости может и не добавляют, а вот удобства при написании запросов хоть отбавляй.


Vladimir Kladov   (2006-06-09 16:35:00) [19]

Бездоказательно. Я уже аргументировал добавлю по использованию. Работаю с разными БД, в основном с MS SQL с 2000 года. Параметрами не пользуюсь принципиально. Пробовал вначале. Ошибок было больше. Просто потому, что параметры лучше всего указывать не опосля, а непосредственно в конструкции SQL-запроса. Иначе легко перепутать местами, и считать замучиться можно, когда запрос приходится менять. Никаких преимуществ по скорости параметры не дают, проверял. О проблемах с типами данных говорил уже. Наконец, поддержка параметров в коде компонента усложнит его как минимум вдвое. Можете проверить, попробовать добавить поддержку.


parovoZZ   (2006-06-08 21:41:00) [20]

Неееее, без параметров ниЗЗЗяя. Это как на асме без меток. Придётся dll-ку юзать.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо