Форум » [x]Harbour » работа с MDB » Ответить

работа с MDB

fil: Всем привет ! Есть mdb-файл для его открытие требуедся в Accesse'e установить связь с файлом рабочей группы mdw (который также присутствует). Пароль администратора известен. Как прогаммно можно открыть такой mdb-файл. Стандартно через ADO не получается

Ответов - 10

Haz: Попробуй так oConnection := CreateObject( "ADODB.Connection" ) oConnection:Open( "Provider=Microsoft.Jet.OLEDB.4.0;User ID=" + cUser + ";Password=" + cPass + ";Data Source=" + cMdb + ";Persist Security Info=True;Jet OLEDB:System database=" + cMdw )

fil: не получилось, хотя через сам Access все норм oCon:= TOleAuto():new("ADODB.Connection") TRY oCon:Open("Provider=Microsoft.Jet.OLEDB.4.0;User ID=gate;Password=gates;Data Source=config.mdb;Persist Security Info=True;Jet OLEDB:System database=gate.mdw") lConnect := .t. CATCH MsgInfo('Connect Fail') END

Dima: fil пишет: =gate.mdw Может дорогу нужно к нему указать ?


fil: все лежит там где exe'шник

Haz: fil пишет: oCon:Open("Provider=Microsoft.Jet.OLEDB.4.0;User ID=gate;Password=gates;Data Source=config.mdb;Persist Security Info=True;Jet OLEDB:System database=gate.mdw") Чую это система контроля доступа "Gate" с карточками. Именно такой строкой к ней цеплялся когда- то вот кусок кода из рабочей проги ( запускалась из папки где mdb и mdw ) Func ConnectMDB( cMdb, cMdw, cUser, cPass ) Local e LOCAL cSql := "" LOCAL aRows := { } LOCAL i := 1 LOCAL xValue := '' LOCAl oConnection Try oConnection := CreateObject( "ADODB.Connection" ) IF Ole2TxtError() != "S_OK" MsgStop( "ADO is not available.", "Error" ) ExitProcess( 0 ) ENDIF oConnection:Open( "Provider=Microsoft.Jet.OLEDB.4.0;User ID=" + cUser + ";Password=" + cPass + ";Data Source=" + cMdb + ";Persist Security Info=True;Jet OLEDB:System database=" + cMdw ) Catch e MsgStop( "Operation: " + e:operation + "-" + "Description: " + e:Description + chr( 10 ) + XTOC( e:Args ), "Error" ) ExitProcess( 0 ) End Return oConnection PS. может так oConnection:Open("Provider=Microsoft.Jet.OLEDB.4.0;User ID=master;Password=masterio0;Data Source=" + GetStartupFolder() + cMdb +";Persist Security Info=True;Jet OLEDB:System database=" + GetStartupFolder() + "\Gate.mdw" )

fil: Все, пошло. Haz, спасибо ! СКДУ таки. На новое место переехали вот карточки и вводим

santy: Протестируйте "ADO Connection String" используя утилиты: CScheck (http://www.softpedia.com/get/Internet/Servers/Database-Utils/ADO-Connection-String-Checker.shtml) ADO Fielder (http://www.alexnolan.net/software/adofielder.htm); MDB Viewer Plus (http://www.alexnolan.net/software/mdb_viewer_plus.htm). Database Connection String Tester (http://www.digitalcoding.com/free-software/database/Database-Connection-String-Tester.html). Есть и другие. Примеры Connection Strings: http://support.microsoft.com/KB/191754 http://www.digitalcoding.com/free-software/database/Database-Connection-String-Tester.html http://www.connectionstrings.com/access/

fil: А как экспортировать данные таблицы в Excel или вытащить в массив. Я так понимаю, что через SQL запрос ?

Haz: fil пишет: ерез SQL запрос ? Примерно так #include "adordd.ch" oConx := TOleAuto():NEW( "ADODB.connection" ) oConx:ConnectionString := cStr oConx:Open() oRSet := TOleAuto():NEW( "ADODB.RecordSet" ) cSQL := "SELECT * FROM EVENTS" // к примеру из таблицы EVENTS WITH OBJECT oRSet :CursorLocation := adUseClient :CursorType := adOpenDynamic :LockType := adLockOptimistic :ActiveConnection := oConx :Source := cSQL :Open() END WITH потом с рекордсетом делай чего надо ( в массив , в эксель и пр) PS или вот еще от туда же примерчик // Загрузка справочника сотрудников oConnection := ConnectMdb(GetStartupFolder() + "\config.mdb", GetStartupFolder() + "\Gate.mdw", 'User', 'Password') cSql := "SELECT Number, Фамилия, Имя, Отчество, GroupPtr, UserPtr FROM Users GROUP BY Number, Фамилия, Имя, Отчество, GroupPtr, UserPtr ORDER BY Фамилия" oRecordSet:=CreateObject("ADODB.Recordset") oRecordSet:Open(cSql,oConnection,3,3) // статический курсор If !oRecordSet:Bof .and. !oRecordSet:Eof oRecordSet:MoveFirst() For i := oRecordSet:AbsolutePosition TO oRecordSet:RecordCount() ? cNumber := IF( Valtype(oRecordSet:Fields["Number"]:value) == 'C', oRecordSet:Fields["Number"]:value, '0' ) ? cUser := IF( Valtype(oRecordSet:Fields["Фамилия"]:value) == 'C', oRecordSet:Fields["Фамилия"]:value + ' ', '') ? cUser += IF( Valtype(oRecordSet:Fields["Имя"]:value) == 'C', oRecordSet:Fields["Имя"]:value + ' ', '') ? cUser += IF( Valtype(oRecordSet:Fields["Отчество"]:value) == 'C', oRecordSet:Fields["Отчество"]:value + ' ', '') ? cGroupPtr := if( Valtype(oRecordSet:Fields["GroupPtr"]:value) == 'N', NTOC( oRecordSet:Fields["GroupPtr"]:value), '0' ) ? cUserPtr := if( Valtype(oRecordSet:Fields["UserPtr"]:value) == 'N', NTOC( oRecordSet:Fields["UserPtr"]:value), '0' ) oRecordSet:MoveNext() end end oRecordSet:Close()

ММК: fil пишет: А как экспортировать данные таблицы в Excel или вытащить в массив. Я так понимаю, что через SQL запрос ? Можешь посмотреть testXbr3.prg. Там , правда , все грузится в бровс, ну а из бровса уверен ты сделаешь все что захочешь :))) Там разные варианты в том числе и SQL запрос - типа .... cSql := ; "SELECT COUNT(*) AS EMPLOYEES, SUM(SALARY) AS TOTSALARY FROM CUSTOMER" oRs := FW_OpenRecordSet( cFilePath( ExeName() ) + "xbrtest.mdb" , cSql ) и т.д. :))



полная версия страницы