VB в Access 2000: запрос ado каждый раз получал разные результаты? - PullRequest
0 голосов
/ 18 марта 2011

Я получил форму, которая имеет 2 кнопки, 1 - для установки файла входных данных, 1 - для запуска подпрограммы, подпрограмма должна выполнить запрос к базе данных.Но тот же простой запрос "select * from opt_in_customer_record;"вернуть другую вещь!Это ужасно!Почему ???

Вот мой код, btnBrowse_Click () будет открывать окно для выбора пользователем файла, каждый раз, когда я буду один и тот же файл.btnGenData_Click () - это подпрограмма, в которой возникла проблема.

для файла данных, здесь первые 20 строк, Event_Plan_Code - первый столбец.5BUDP; Гонконг; 050111; 520010100500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000; Гонконг; 310111; 520010100361924 1BUDP; Гонконг; 310111; 520010100392644 1BUDP; Гонконг; 290111; 520010100406914 3BUDP; Гонконг; 280111; 5200101;Гонконг; 210111; 520010100576847 5BUDP; Гонконг; 230111; 520010100583232 3BUDP; Гонконг; 200111; 520010100637103 3BUDP; Гонконг; 160111; 520010100639083 3BUDP; Гонконг; 190111; 5200000000000000006156166 (Гонконг);остановить, если первый символ Event_Plan_Code равен 1, просто остановить программу для отладки.И каждый раз, когда я нажимаю кнопку, я получаю другой результат:

1-й запуск: 5BUDP 5BUDP 5BUDP 3BUDP 5BUDP 1BUDP

это имеет смысл.

2-й запуск: 3BUDP 1BUDP

Проблема в том, что запрос должен начинаться заново, а результат должен быть таким же!Теперь другой результат, который я получил.

Большое спасибо, если вы можете ответить на мой вопрос!

Option Compare Database
Private Sub btnBrowse_Click()

Dim filePath As String

filePath = LaunchCD(Me)

txtFilePath.Value = filePath
txtStatus.Value = ""
End Sub

Private Sub btnGenData_Click()
'On Error GoTo Error_Handling

Dim extractCdrFlag As Boolean


txtStatus.Value = ""
If IsNull(txtFilePath.Value) Then
    MsgBox "Please enter a valid input file location."
Else
    txtStatus.Value = ""
    txtStatus.Value = txtStatus.Value & "Deleting previous record from table Opt_In_Customer_Record..." & vbCrLf
    CurrentDb.Execute "deleteAll"
    txtStatus.Value = txtStatus.Value & "Delete successfully." & vbCrLf
    If FileExists(txtFilePath.Value) Then
            txtStatus.Value = txtStatus.Value & "Trying to import data from file..." & vbCrLf
            DoCmd.TransferText acImportDelim, "Import_Specification", "Opt_In_Customer_Record", txtFilePath.Value, False
            txtStatus.Value = txtStatus.Value & "Data imported successfully." & vbCrLf
            Testing
            txtStatus.Value = ""
    Else
            MsgBox "File does not exist. Please enter again."
    End If
End If

Exit Sub

Error_Handling:
MsgBox "Error while generating data! Please check your data setting!"
Exit Sub

End Sub


Sub Testing()
'On Error GoTo Error_Handling
   Dim conConnection As New ADODB.Connection
   Dim cmdCommand As New ADODB.Command
   Dim rstRecordSet As New ADODB.Recordset

   Dim eventPlanCode As String
   Dim visitedCountry As String
   Dim startDateTxt As String
   Dim startDate As Date
   Dim endDate As Date
   Dim imsi As String
   Dim currentMonth As String
   Dim nextMonth As String
   Dim currentYear As String
   Dim nextYear As String
   Dim temp As Integer
   Dim sql As String

   'MsgBox CurrentDb.Name

   With conConnection
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .ConnectionString = CurrentDb.Name
    .Open
   End With

    'MsgBox conConnection.ConnectionString

   With cmdCommand
    .ActiveConnection = conConnection
    .CommandText = "SELECT * FROM Opt_In_Customer_Record;"
    .CommandType = adCmdText
   End With

   With rstRecordSet
    .CursorType = adOpenStatic
    .CursorLocation = adUseClient
    .LockType = adLockOptimistic
    .Open cmdCommand
   End With

   If rstRecordSet.EOF = False Then
        rstRecordSet.MoveFirst
        Do

            'Debug.Print txtStatus.Value
            eventPlanCode = rstRecordSet!Event_Plan_Code
            visitedCountry = rstRecordSet!Visited_Country
            startDateTxt = rstRecordSet!Start_Date
            imsi = rstRecordSet!imsi

            currentMonth = Mid$(startDateTxt, 3, 2) '01
            currentYear = "20" & Mid$(startDateTxt, 5, 2) '2011

            startDate = DateSerial(Val(currentYear), Val(currentMonth), Val(Mid$(startDateTxt, 1, 2)))
            endDate = startDate + Val(Mid$(eventPlanCode, 1, 1))

            MsgBox rstRecordSet!Event_Plan_Code

            If (Mid$(eventPlanCode, 1, 1) = "1") Then
                Exit Sub
            End If

            'MsgBox startDate & " " & endDate
            If (currentMonth = "01") Then
                nextMonth = "02"
            ElseIf (currentMonth = "02") Then
                nextMonth = "03"
            ElseIf (currentMonth = "03") Then
                nextMonth = "04"
            ElseIf (currentMonth = "04") Then
                nextMonth = "05"
            ElseIf (currentMonth = "05") Then
                nextMonth = "06"
            ElseIf (currentMonth = "06") Then
                nextMonth = "07"
            ElseIf (currentMonth = "07") Then
                nextMonth = "08"
            ElseIf (currentMonth = "08") Then
                nextMonth = "09"
            ElseIf (currentMonth = "09") Then
                nextMonth = "10"
            ElseIf (currentMonth = "10") Then
                nextMonth = "11"
            ElseIf (currentMonth = "11") Then
                nextMonth = "12"
            ElseIf (currentMonth = "12") Then
                nextMonth = "01"
            End If

            temp = Val(currentYear)
            temp = temp + 1
            nextYear = Str(temp)

            'MsgBox currentYear & currentMonth & " " & nextYear & nextMonth

            'Exit Do
            rstRecordSet.MoveNext
        Loop Until rstRecordSet.EOF = True
   End If

   'sql = "select * from ( select * from " & "dbo.inbound_rated_all_" & currentYear & currentMonth & " A inner join Opt_In_Customer_Record B "


   conConnection.Close
   Set conConnection = Nothing
   Set cmdCommand = Nothing
   Set rstRecordSet = Nothing

   Exit Sub

Error_Handling:
MsgBox "Error during function Testing!"
Set conConnection = Nothing
Set cmdCommand = Nothing
Set rstRecordSet = Nothing
Exit Sub

End Sub

1 Ответ

1 голос
/ 18 марта 2011

Если вы хотите, чтобы строки были в определенном порядке, добавьте в запрос предложение ORDER BY:

select * from opt_in_customer_record order by event_plan_code

На самом деле, event_plan_code - это не тот столбец, потому что он содержит дубликаты, но это должно указатьв правильном направлении.

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