Доступ к экспорту Excel, обновляющему определенное поле в Do While - PullRequest
0 голосов
/ 31 января 2012

Мне нужно запросить таблицу базы данных, а затем записать 3 из 4 полей в электронную таблицу Excel. Как только эта строка написана, мне нужно обновить поле 'sentback' на 'Y'. Это было начальное поле, используемое в предложении where. Таким образом, вся идея состоит в том, чтобы запросить, написать и изменить флаг на «Y», чтобы я больше не выбирал эти записи.

У меня половина кода работает здесь. Я знаю, что могу, вероятно, как-то использовать DoCmd, но не могу понять это.

Другие записи могут быть добавлены в базу данных во время выполнения подпрограммы, поэтому обновление должно происходить для текущего набора записей, используемого в do, во избежание установки флага для записей, которые, возможно, не были отправлены.

Любая помощь очень ценится

Dim strSQL As String



strExcelFile = "C:\MySpreadSheet.xls"
strWorksheet = "WorkSheet1"
strDB = "C:\track.accdb"
strTable = "manifests2"

Set db = CurrentDb

'If excel file already exists, you can delete it here
If Dir(strExcelFile) <> "" Then Kill strExcelFile


strSQL = "SELECT manifests2.[Shipment ID], manifests2.[Courier Service Level],       manifests2.[Other Tracking],manifests2.[sentback]  FROM " & "[" & strTable & "] WHERE (((manifests2.[sentback]) = 'N') and ((manifests2.[Other Tracking]) <> NULL))"

Set rs = db.OpenRecordset(strSQL)

Do While Not rs.EOF


    rs.Edit
    rs("sentback").Value = "Y"
    rs.Update

    rs.MoveNext
Loop

End Sub

1 Ответ

0 голосов
/ 31 января 2012

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

strExcelFile = "C:\MySpreadSheet.xls"
'strWorksheet = "WorkSheet1"
'strDB = "C:\track.accdb"
strTable = "manifests2"

Set db = CurrentDb

''The sheet takes its name from the query. This connection string depends
''on the versions of Access and Excel that you are using.
cn = "[Excel 8.0;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=" & strExcelFile & "].[OutDat$]"

''If excel file already exists, you can delete it here
If Dir(strExcelFile) <> "" Then Kill strExcelFile

''Just use an existing query.
''If a query is to be created/updated each time, you need to check
''if it exists and either create or update as appropriate.

''strSQL = "SELECT m.[Shipment ID], m.[Courier Service Level], " _
       & "m.[Other Tracking], m.[sentback]  " _
       & "FROM [" & strTable & "] As m " _
       & "WHERE m.[sentback] = 'N' And m.[Other Tracking] Is Not Null"

''db.CreateQueryDef "OutDat", strSQL

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "OutDat", strExcelFile

strSQL = "UPDATE [" & strTable & "] SET SentBack = 'Y' " _
       & "WHERE [Shipment ID] In (SELECT [Shipment ID] FROM " _
       & cn & ")"

db.Execute strSQL

Есть некоторые проблемы.Например, у вас есть пробелы в именах полей (столбцов).Это сделает вашу жизнь еще труднее.Вы, кажется, выбрали текст для sentback, когда YesNo (булево) было бы более очевидным выбором.Нет ничего равного или не равного null, чему-то is null или is not null.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...