|
|
|
| Была база MDB - решил переделать в ADP.
Источник конкертизировался при открытии формы в зависимости от фильтра.
Ну и еще - можно было динамически менять фильтр при вводе условия фильтра в поле и нажатии на кнопку. Все это работало в MDB. В ADP не работает.
В чем проблема?
Процедуры открытия и смены фильтра приведены:
Private Sub Form_Open(Cancel As Integer)
Dim strNewRecord As String
Application.SetOption "Confirm Action Queries", False
MyFilter = " WHERE (IsAccepted = False) AND (IsRejected = False) Order by vh_vc_Code, vh_VehicleNumber"
strNewRecord = "SELECT * FROM vwVehicleFrm " & MyFilter
Me.RecordSource = strNewRecord
End Sub
Private Sub cmdAccepted_Click()
Dim strNewRecord As String
MyFilter = " WHERE (IsAccepted = True) "
MyFilter2Class = " AND (vh_vc_Code Like '" & Trim(Me!txtShowClass.Value) & "*') "
If Trim(Me.txtShowClass) <> "" Then _
MyFilter = MyFilter & MyFilter2Class
strNewRecord = "SELECT * FROM Vehicle " & MyFilter & "Order by vh_vc_Code, vh_VehicleNumber"
Me.RecordSource = strNewRecord
Me.cmdAccepted.ForeColor = vbMagenta
Me.cmdNotReviewed.ForeColor = vbBlack
Me.cmdRejected.ForeColor = vbBlack
Me.cmdAll.ForeColor = vbBlack
' DoCmd.Requery
End Sub | |
|
| |
|
|
|
| А как не работает? не изменяется набор данных?
Попробуйте после:
Me.RecordSource = strNewRecord
|
Добавить:
| |
|
| |
|
|
|
| me.Requery не помог.
>А как не работает? не изменяется набор данных?
Пытаюсь вставить различные WHERE - набор устойчиво выдает все.
Наверное в ADP надо работать через SP с параметрами?
А жаль. Так было удобно подсунуть свой recordset форме.
Может у кого есть присерчик - как в ADP подсунуть рекордсет форме?
Я был бы безмерно счастлив и благодарен. | |
|
| |
|
|
|
| вот это попробуйте
http://hiprog.com/index.php?option=com_content&task=view&id=406&Itemid=35 | |
|
| |
|
|
|
| http://support.microsoft.com/kb/q227053/#top - тут нашел вариант.
Только мне кажется - не совсем это оптимально - каждый раз рекордсет подменять.
Это каждый раз при применении фильтра создается новый рекордсет?
Их же как то закрывать бы надо.
Вот так переписал предыдущий код:
Private Sub Form_Open(Cancel As Integer)
' Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim strSQL As String
strSQL = "SELECT TOP 100 PERCENT dbo.VehicleClass.vc_Code, dbo.Vehicle.vh_VehicleNumber, dbo.Vehicle.vh_CheckLetter, dbo.Vehicle.vh_IsActive, " & vbCrLf & _
"dbo.Vehicle.vh_cu_id_TrainOperator, dbo.Vehicle.vh_cu_id_VehicleUser, dbo.Vehicle.vh_cu_id_VehicleOwner, " & vbCrLf & _
"dbo.Vehicle.vh_cu_id_VehicleMaintainer , dbo.Vehicle.vh_TareMass, dbo.Vehicle.vh_Length, dbo.Vehicle.vh_Comments " & vbCrLf & _
"FROM dbo.Vehicle INNER JOIN " & vbCrLf & _
"dbo.VehicleClass ON dbo.Vehicle.vh_vc_id = dbo.VehicleClass.id" & vbCrLf & _
"WHERE (dbo.VehicleClass.vc_Code = 'B') " & vbCrLf & _
"ORDER BY dbo.VehicleClass.vc_Code, dbo.Vehicle.vh_VehicleNumber"
'Use Microsoft Access's OLEDB connection to the Jet database
Set cn = CurrentProject.Connection
Set rs = New ADODB.Recordset
With rs
.Source = strSQL
.ActiveConnection = cn
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.Open
End With
Set Me.Recordset = rs
End Sub
Private Sub cmdAll_Click()
Dim rs As ADODB.Recordset
Dim strSQL As String
strSQL = "SELECT TOP 100 PERCENT dbo.VehicleClass.vc_Code, dbo.Vehicle.vh_VehicleNumber, dbo.Vehicle.vh_CheckLetter, dbo.Vehicle.vh_IsActive, " & vbCrLf & _
"dbo.Vehicle.vh_cu_id_TrainOperator, dbo.Vehicle.vh_cu_id_VehicleUser, dbo.Vehicle.vh_cu_id_VehicleOwner, " & vbCrLf & _
"dbo.Vehicle.vh_cu_id_VehicleMaintainer , dbo.Vehicle.vh_TareMass, dbo.Vehicle.vh_Length, dbo.Vehicle.vh_Comments " & vbCrLf & _
"FROM dbo.Vehicle INNER JOIN " & vbCrLf & _
"dbo.VehicleClass ON dbo.Vehicle.vh_vc_id = dbo.VehicleClass.id" & vbCrLf & _
"WHERE (dbo.VehicleClass.vc_Code = '" & txtShowClass & "') " & vbCrLf & _
"ORDER BY dbo.VehicleClass.vc_Code, dbo.Vehicle.vh_VehicleNumber"
'Use Microsoft Access's OLEDB connection to the Jet database
Set cn = CurrentProject.Connection
Set rs = New ADODB.Recordset
With rs
.Source = strSQL
.ActiveConnection = cn
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.Open
End With
Set Me.Recordset = rs
End Sub
|
| |
|
| |
|
|
|
| Вроде выкуртился.
Тут выше изложил как. | |
|
| |
|
|
|
| WHERE в adp работает нормально.
Попробуйте в место FALSE поставить 0
MyFilter = " WHERE (IsAccepted = 0) AND (IsRejected = 0) Order by vh_vc_Code, vh_VehicleNumber" | |
|
| |
|
|
|
| Я пробовал разные WHERE. Когда форму я с MDB импортнул, мне пришлось внутреннюю таблицу поменять на SQ-скую. И потом в Open или по кнопке менять фильтр. И у меня создалось впечатление - что хоть "лопни", а вот как форма прицепится с самого начала к SQL таблице - так ее уже никак не подменишь другим скажем селектом. | |
|
| |