У меня есть база данных, содержащая местоположения колодцев и тонны свойств, связанных с этими скважинами. Все таблицы связаны с WELL_ID (название скважины), который является типом данных «короткий текст», из того, что я могу сказать. В базе данных есть существующие запросы, из которых я пытаюсь получить данные (я не хочу возиться со столами, если я ошибаюсь и что-то испортил).MS Access Тип данных VBA несоответствие функции
Я создал форму, в которой пользователь вводит координаты UTM для восточного и северного направлений, а также радиус поиска, а затем нажимает кнопку «поиск». При нажатии на поиск процедура создает набор записей [qryUTM_NAD83], затем вычисляет радиальное расстояние каждой лунки и, если оно находится в указанном радиусе поиска, оно сохраняется в новой таблице [Search_Results], используя INSERT INTO.
Теперь, когда скважина идентифицирована как критерии поиска, WELL_ID хранится и передается функции, которая выполняет поиск по набору записей другого запроса [qryFormation]. Этот запрос имеет отношение «один ко многим», где есть запись для каждого геологического уровня, каждый из которых имеет один и тот же WELL_ID (то есть каждая ячейка имеет несколько уровней, но все эти уровни имеют одинаковый WELL_ID). Мне нужно объединить эти слои в одну строку, передать их обратно в функцию поиска и добавить ее в таблицу [Search_Results]. Тем не менее, я получаю ошибку несоответствия типа данных в инструкции SQL.
Вот код, у меня есть: (я опустил некоторые части кода, чтобы держать его коротким для всех вас)
Private Sub SearchButton_Click()
Dim WellID As String, mySQL As String, NewLitho As String
'Creating new recordsets from [qryUTM_NAD83] table
Dim rs1 As DAO.Recordset
'[ZONE] is just user specified, helps me narrow the search a little
Set rs1 = CurrentDb.OpenRecordset("SELECT [qryUTM_NAD83].* " & _
"FROM [qryUTM_NAD83] " & _
"WHERE [ZONE] = " & frmZone, dbOpenDynaset)
'Moving through the recordset
rs1.MoveFirst
Do While Not rs1.EOF
'calculated radius, r , for this well (omitted)
If r < SearchRadius Then
WellID = Val(rs1.Fields("WELL_ID").Value)
NewLitho = LithoTransform(WellID)
mySQL = "INSERT INTO [Search_Results] " & _
"([WELL_ID], [Easting], [Northing], [Radius], [Lithology]) " & _
"VALUES (" & WellID & ", " & x & ", " & y & ", " & r & ", " & NewLitho & ")"
CurrentDb.Execute mySQL
rs1.MoveNext
End If
Loop
End Sub
Функция: (ошибка в «Set RS2 ...» - тип данных рассогласование)
Public Function LithoTransform(CurrentID As String) As String
'CurrentID is the well which was identified as being within the search radius
Dim rs2 As DAO.Recordset
Dim mySQL2 As String
'SQL statement and new recordset of the well we are looking at in the search
Debug.Print CurrentID
mySQL2 = "SELECT [qryFormation].* " & _
"FROM [qryFormation] " & _
"WHERE [WELL_ID] = " & CurrentID
Set rs2 = CurrentDb.OpenRecordset(mySQL2, dbOpenDynaset)
'Move through recordset rs2 and concatenating into new string
'Bunch of code here
'Close recordset set it to 'nothing'
End Function
Большое спасибо, у меня было ощущение, что это будет так просто. Я использую помощь Access и веб-поиски, есть всего много чего, чтобы обернуть мою голову. Я также попытаюсь сделать запрос параметров. Еще раз спасибо! – Sashman