2014-10-20 8 views
1

У меня есть база данных, содержащая местоположения колодцев и тонны свойств, связанных с этими скважинами. Все таблицы связаны с 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 

ответ

1

с WELL_ID является тип текста, включают в кавычки значения CurrentID, когда вы включите его в пункте WHERE. Таким образом, самый быстрый фикс, вероятно, это ...

mySQL2 = "SELECT [qryFormation].* " & _ 
     "FROM [qryFormation] " & _ 
     "WHERE [WELL_ID] = '" & CurrentID & "'" 

Однако, вы можете переключиться на запрос с параметрами, а и тем самым избежать проблем с кавычками. Вот непроверенный пример ...

Dim db As DAO.Database 
Dim qdf AS DAO.QueryDef 
Dim rs2 As DAO.Recordset 
Dim mySQL2 As String 

mySQL2 = "SELECT [qryFormation].* " & _ 
     "FROM [qryFormation] " & _ 
     "WHERE [WELL_ID] = [which_id]" 
Set db = CurrentDb 
Set qdf = db.CreateQueryDef(vbNullString, mySQL2) 
qdf.Parameters("which_id") = CurrentID 
Set rs2 = qdf.OpenRecordset 

Использования справочной системы Access для проверки функций, синтаксиса и т.д. в этом коде в случае, если я сделал ошибку. Поскольку вы новичок в Access, вам будет удобно пользоваться своей справочной системой.

+0

Большое спасибо, у меня было ощущение, что это будет так просто. Я использую помощь Access и веб-поиски, есть всего много чего, чтобы обернуть мою голову. Я также попытаюсь сделать запрос параметров. Еще раз спасибо! – Sashman

Смежные вопросы