• Dy1 (14.09.09 19:57) [0]
    помогите пожалуйста с KOLOdbc - нужна строка подключения к базам Access. Или хотя бы БД к демке.
  • Jon © (14.09.09 21:01) [1]
  • Dy1 (14.09.09 22:56) [2]
    спасибо, интересно :)
    Исключение при попытке подключиться. Один драйвер установлен, но видимо провайдер по непонятной причине не работает. Других драйверов в инете не нашёл.
    А кто-нибудь пользовался этим модулем?
  • D[u]fa (15.09.09 16:02) [3]
    Видимо не особо.. может юзать базы по проще? типа sqlite. Или нужно именно одбц?
  • Vladimir Kladov © (15.09.09 19:58) [4]
    Еще можно создать соединение. В контрольной панели, Администрирование, Data Sources (ODBC), System DSN. Драйвр нужен Jet для Access'а. Там и протестируете.
  • Dy1 (15.09.09 23:36) [5]
    нужна совместимость с Access. Я знаю только JET4. Кстати, не только у меня проблемы с освобождением интерфейсов в Делфи.

    Driver do Microsoft Access или Microsoft Access Driver ?
    Сегодня поздно, завтра попробую что получилось.
  • Dy1 (16.09.09 12:37) [6]
    DB.DSNConnect( 'q', 'Admin', '' );

    останавливается на строке 637:
    raise EODBC.CreateError( SQL_HANDLE_DBC, fConnHandle, R, 'Не удалось установить тип асинхронности = ' + IntToStr( Integer( Value ) ) );

    с сообщением Exception with message ''.

     q.udl
    [oledb]
    ; Everything after this line is an OLE DB initstring
    Provider=MSDASQL.1;Persist Security Info=False;User ID=Admin;Data Source=q

    пробовал в Data Source ставить путь к базе - без изменений.
  • Dy1 (17.09.09 16:36) [7]
    как подключиться с помощью метода Connect ?
  • Dy1 (01.06.11 20:58) [8]
    с тех пор я так и не смог заюзать одбц и никто не хочет сказать что я делаю не так...
  • User (02.06.11 16:02) [9]
    Да, с тех пор не мало воды утекло :)
  • Jon © (05.06.11 22:53) [10]
    I tried this code:


    program OdbcTest;

    uses
     Windows, Messages, KOL, Err, KOLOdbc;

    procedure ButtonClick(Dummy: Pointer; Sender: PObj);
    var
     DB: PODBCDatabase;
    begin
     New(DB, Create);
     DB.ConnectionString := 'filedsn=TestSQL.dsn;Uid=admin;Pwd=;';
     if DB.Connect then
     begin
       ShowMessage('Connected!');
     end
     else
       DB.Free;
    end;

    begin
     OleInit;
     Applet := NewForm(nil, '');
     with NewButton(Applet, 'Connect')^ do
       OnClick := TOnEvent(MakeMethod(nil, @ButtonClick));
     Run(Applet);
     OleUnInit;
    end.



    The database did connect, but there was an error in KOLOdbc.pas:


    procedure TODBCDatabase.SetAsync(const Value: Boolean);
    var R: Word;
    begin
     FAsync := Value;
     if not Connected then Exit;
     R := SQLSetConnectAttr(fConnHandle, SQL_ATTR_ASYNC_ENABLE,
                     Pointer( FAsync ), SQL_NTS);
     if R > 1 then
       raise EODBC.CreateError( SQL_HANDLE_DBC, fConnHandle, R,
         'Íå óäàëîñü óñòàíîâèòü òèï àñèíõðîííîñòè = ' +
         IntToStr( Integer( Value ) ) );
    end;



    R is always 65535 - can anyone help?
  • Thaddy © (18.06.11 19:38) [11]
    Isn't that ( a signed word value of minus one (as in true, -1) the SQL_RESULT_WITH_INFO? (on top of my head, don't use odbc anymore)
  • Jon © (27.06.11 17:53) [12]
    Very well spotted, Thaddy.

    I replaced:

    if R > 1 then



    with this:

    if SmallInt(R) > 1 then



    and it works now.

    Hopefully it helps the original poster.
  • Thaddy © (08.08.11 22:18) [13]
    Late, but why not more correct:

    var
    R:SmallInt;


    Because ODBC results are signed words i.e. small integers.
    Also, the with_info part contains useful information and can help you debug your statements at runtime, so do not ignore it. Although a lot of ODBC drivers ignore it.
Есть новые Нет новых   [120350   +21][b:0][p:0.001]