Всем привет!
MS Access 2003 SP2; *.mdbСтолкнулся с такой вот вещью (работа со временной базой данных):
1. ADO: создаю таблицу;
2. Currentdb: Заливаю данные.
ADO: рекордсет по условию -> RecordCount = 0
Повторный рекордсет -> RecordCount=3
Как бороться с этим?
Часть кода:
...
Global connA As New ADODB.Connection
Global db As Database
...
Private rstA As New ADODB.Recordset
TempDBName = "c:\base\tempdb.mdb"
TableName = "uchet_Sborka": TempTabStr = TableName & " in '" & TempDBName & "'"
connA.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & TempDBName
connA.ConnectionTimeout = 180: connA.Open
Set db = CurrentDb
...
SQL = "create table " & TableName & " (DELIVERYDATE Date, EMPLOYEE text(255), DELIVERYNOTE Long, DIMENSION6 Integer, WORKTYPE Text(50), " & _
"ITEMNUMBER text(255), QTY Integer)" 'сборка запроса
Call ExecA(SQL) 'обработка запроса
SQL = "insert into " & TempTabStr & " SELECT DTRANS.DELIVERYDATE, WCALC.EMPLOYEE, DTRANS.DELIVERYNOTE, DTRANS.DIMENSION6, WCALC.WORKTYPE, " & _
"DTRANS.ITEMNUMBER, DTRANS.QTY FROM XAL_SUPERVISOR_DEBDLVTRANS DTRANS, XAL_SUPERVISOR_DEBDLVJOUR DJOUR, XAL_SUPERVISOR__WORKCALCULATION " & _
"WCALC, DTRANS INNER JOIN DJOUR ON DTRANS.DELIVERYNOTE = DJOUR.DELIVERYNOTE, WCALC INNER JOIN DJOUR ON WCALC.REFRECID = " & _
"DJOUR.ROWNUMBER where DJOUR.salesproj=0 and WCALC.dataset ='dat' and DTRANS.dataset ='dat' and DJOUR.dataset='dat' and " & _
"WCALC.employee <> '' and DTRANS.DELIVERYDATE between " & DatePeriod(0) & " and " & DatePeriod(1) 'Сборка запроса
Call Exec(db, SQL) 'обработка запроса
SQL = "SELECT worktype from " & TableName & " group by worktype ORDER BY worktype" 'сборка запроса
rstA.Open SQL, connA, adOpenStatic 'рекордсет запроса
'If (rst0.BOF And rst0.EOF) Then GoTo end_funct 'пробовал так ловить наличие записей
If rstA.RecordCount = 0 Then GoTo end_funct 'проверка на результативность
...
Функция
Call ExecA(SQL)Private Function BeginTransA() 'Функция начала транзакции
If BT_A = True Then Exit Function 'проверка на ранее начатую транзакцию
connA.BeginTrans 'начало транзакции
BT_A = True
End Function
Private Function CommitTransA() 'Функция завершения транзакции
If BT_A = False Then Exit Function 'проверка на ранее закрытую транзакцию
connA.CommitTrans 'завершение транзакции
BT_A = False
End Function
Public Function ExecA(str As String) 'Функция обработки запроса через транзакцию
On Error GoTo ErrRollback
If connA.State = 0 Or connA Is Nothing Then Call TempDBOpen 'проверка на наличие установленного соединения с временным файлом
Call BeginTransA 'Функция начала транзакции
connA.Execute (str), dbFailOnError 'обработка запроса
Call CommitTransA 'Функция завершения транзакции
Exit Function
ErrRollback:
BT_A = False
connA.Rollback 'откат
Call ExecRollBackA(str) 'Функция повторной обработки запроса через транзакцию
End Function
Функция
Call Exec(db, SQL)Public Function Exec(dbase As Database, str As String) 'Функция обработки запроса через транзакцию
On Error GoTo ErrRollback
WrkSpace.BeginTrans 'начало транзакции
dbase.Execute (str), dbFailOnError 'обработка запроса
WrkSpace.CommitTrans 'завершение транзакции
Exit Function
ErrRollback: WrkSpace.Rollback 'откат
Call ExecRollBack(dbase, str) 'Функция повторной обработки запроса через транзакцию
End Function
+ - + - + - + - + - + - +
Век живи, век учись!