Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Форма и источник в ADP & MDB (Access 2000/2003)
 
 автор: Massa   (07.03.2007 в 06:41)   личное сообщение
 
 

Была база 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

  Ответить  
 
 автор: osmor   (07.03.2007 в 08:31)   личное сообщение
 
 

А как не работает? не изменяется набор данных?
Попробуйте после:

Me.RecordSource = strNewRecord


Добавить:

me.Requery

  Ответить  
 
 автор: Massa   (07.03.2007 в 09:29)   личное сообщение
 
 

me.Requery не помог.
>А как не работает? не изменяется набор данных?
Пытаюсь вставить различные WHERE - набор устойчиво выдает все.
Наверное в ADP надо работать через SP с параметрами?
А жаль. Так было удобно подсунуть свой recordset форме.
Может у кого есть присерчик - как в ADP подсунуть рекордсет форме?
Я был бы безмерно счастлив и благодарен.

  Ответить  
 
 автор: osmor   (07.03.2007 в 10:48)   личное сообщение
 
 

вот это попробуйте
http://hiprog.com/index.php?option=com_content&task=view&id=406&Itemid=35

  Ответить  
 
 автор: Massa   (07.03.2007 в 11:50)   личное сообщение
 
 

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

  Ответить  
 
 автор: Massa   (08.03.2007 в 07:26)   личное сообщение
 
 

Вроде выкуртился.
Тут выше изложил как.

  Ответить  
 
 автор: АлексейЕ   (07.03.2007 в 11:28)   личное сообщение
 
 

WHERE в adp работает нормально.
Попробуйте в место FALSE поставить 0
MyFilter = " WHERE (IsAccepted = 0) AND (IsRejected = 0) Order by vh_vc_Code, vh_VehicleNumber"

  Ответить  
 
 автор: Massa   (07.03.2007 в 11:49)   личное сообщение
 
 

Я пробовал разные WHERE. Когда форму я с MDB импортнул, мне пришлось внутреннюю таблицу поменять на SQ-скую. И потом в Open или по кнопке менять фильтр. И у меня создалось впечатление - что хоть "лопни", а вот как форма прицепится с самого начала к SQL таблице - так ее уже никак не подменишь другим скажем селектом.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList