2010-10-03 5 views
1

Я использую SQL 2005 как backend и MS Access в качестве интерфейса.SQL и MS access-фильтрация данных в форме

Теперь я получаю всю свою фильтрацию данных с просмотрами и никаких проблем до сих пор, но я столкнулся с некоторыми проблемами.

В доступе у меня была форма, и на этой форме у меня было поле1, которое я использовал для фильтрации данных, которые я хотел в этой форме с запросом. Пример: Last, First Name или DOB. В Access я использовал построитель выражений, чтобы указать запрос в это поле, и я получил свой фильтр. Теперь, как это сделать в этой новой среде с тех пор, как я создаю представление (In Access), я не могу фильтровать в этом поле.

Я думал о sp, но я не уверен, как это сделать.

Любые идеи?

Я думал о sp, но я не уверен, как это сделать.

ответ

1

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

Настройка прохода через запрос, который запускает ваш SP. Основной формат, который по линии этого

EXEC [dbo].[spAgents_with_more_than_X_days_sick_by_Team] @Date_from = N'2009-09-14', @Date_to = N'2010-09-14', @Team_ID = N'TEM1', @Days_sick =5 

Вы бы тогда изменить это при открытии формы, как этот

Set qDef = DBEngine(0)(0).QueryDefs("RqryAgents_more_than_X_sicks_detail_2") 
With qDef 
    .Connect = strSQL_con_string 
    .SQL = "EXEC [dbo].[spAgents_with_more_than_X_days_sick_by_Team]" 
    .SQL = .SQL & " @Date_from = N'" & Format(Me.txtDate_from, "yyyy-mm-dd") & "', " 
    .SQL = .SQL & "@Date_to = N'" & Format(Me.txtDate_to, "yyyy-mm-dd") & "', " 
    .SQL = .SQL & "@Team_ID = N'" & Me.txtTeam_ID & "', " 
    .SQL = .SQL & "@Days_sick =" & Me.txtDays_sick 
End With 

Это должно работать нормально, однако если бы это было мне (и я знаю, это не все предпочтения), но я бы сделал это несвязанной формой и заполнил его, выпустив свой SP с помощью ADO, чтобы заполнить набор записей и перейти оттуда.

Если вы хотите подробнее о том, как сделать это, то просто спросите, и я отправлю пример

EDIT: Пример кода добавлено

Dim cmd as new ADODB.Command 
Dim dbCon as new ADODB.Connection 
Dim rst as new ADODB.Recordset 
dbCon.ConnectionString=”Your_Connection_string” 
dbCon.open 

With cmd 
    .ActiveConnection = dbCon 
    .CommandText = "spYour SP" 
    .CommandType = adCmdStoredProc 
    .NamedParameters = True 
    .Parameters.Append .CreateParameter("@Your_pram1", adVarChar, adParamInput, 20, Format(Me.txtDate, "yyyy-mm-dd")) 
    .Parameters.Append .CreateParameter("@Your_pram2", adSmallInt, adParamInput, 0, Me.cboPhone_skill) 
End With 

Set rst = cmd.Execute() 
With rst 
    If .EOF=False then 
    Me.txtYour_text_box_1=!Your_SP_field_1 
    Me.txtYour_text_box_2=!Your_SP_field_3 
    Me.txtYour_text_box_3=!Your_SP_field_2 
    End if 
End with 
Rst.close 
Dbcon.close 
Set rst=nothing 
Set cmd=nothing 

Set dbcon = ничего

+0

Несомненно, спасибо Кевину, не могли бы вы опубликовать данные, используя ADO. – Tony

+0

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

+0

Спасибо, Кевин, это то, что я искал. Позвольте мне заняться и проверить его. – Tony

0

Вы не укажите, действительно ли эти текстовые поля в той же форме с данными, и вы не укажете, было ли каждое текстовое поле необязательным, и если они не были необязательными, то вы заполнили 1, 2 или 3 поля, а затем ударили кнопка?

Если вы просто хотите, чтобы найти людей с данной LastName, то в случае после обновления оон связанный LastName коробки, просто пойти:

Me.RecordSource = "select * from tblCustomers where LastName = '" & me.txtLastName "'" 

Выше одна строка кода. Я просто не вижу необходимости в таком количестве кода, как другие, размещенные здесь.

Вы можете расширить свой вопрос, если вы хотите сделать все 3 коробки дополнительными, или если вы ищете поиск по более чем одному ящику, но я могу сказать вам, что вам не нужны суммы код, размещенный здесь, но достаточно одной строки кода, как указано выше.

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