Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Ustawienie DataSource w czasie wykonywania kodu
NKris




Typ: neutral
Postów: 15
Zarejestrowany: Apr 2005
Ustawienie DataSource w czasie wykonywania kodu

Podczas ładowania programu jest tworzony obiekt db As Database i rs As Recordset. W jaki sposób połączyć TextBox aby były pokazywane dane podczas zmiany rekordu? Set Text1.DataSource = rs  powoduje błąd.

Dzięki i pozdrawiam...

06-05-2005 12:11
Pokaż profil NKris  Wyślij email do NKris   
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003

A jak uzyskujesz połączenie:
- za pomocą obiektu Data i pole tekstowe jest połączone z polem w tabeli bazy danych?
- czy chcesz pobierać dane z tabeli z pominięciem Data?


_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

07-05-2005 09:31
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
NKris




Typ: neutral
Postów: 15
Zarejestrowany: Apr 2005
Ustawienie DataSource w czasie wykonywania kodu

Witam i dzieki za zaiteresowanie tematem...
Jeżeli chodzi o dane to pobieram z tabeli Dane.mdb i nie używam kontrolki Data tylko do projektu oczywiście w oknie References dodaję Microsoft DAO Object Library i jak pisałem są tworzone obiekty Database i Recordset coć podobnego jak poniżej

'deklaracja w module
Public db As Database, rs As Recordset

Private Sub Form_Load()
  Set db = OpenDatabase(App.Path & "\Dane.mdb"
  Set rs = db.OpenRecordset("Tabela1" ' Tabela1 nazwa tabeli
    rs.MoveLast
    Text1.Text = rs!Pole1
    Text2.Text = rs!Pole2
End Sub
A moje pytanie to jak a może czy jest możliwość powiązania np. Text1.DataSource  z obiecten Recordset rs by mieć ten skutek jaki mamy przy powiązaniu kontrolki Data i TextBox'a w czasie projektowania.
Znających temat napewno jest wielu...
Pozdrawiam

07-05-2005 12:38
Pokaż profil NKris  Wyślij email do NKris   
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003

Jeśli nie używasz obiektu Data, to nie powiążesz tego w taki sposób z polami w tabeli.

Dodaj 4 przyciski na formularzu i ponazywaj zgodnie z tym, jak ja je nazwałem, byś mógł poruszać się między rekordami:
'przycisk 1 - CmdGoToFirst
Private Sub CmdGoToFirst_Click
On Error Resume Next
    rs.MoveFirst
    UpdateFields
End Sub

'przycisk 2 - CmdGoToPrevious
Private Sub CmdGoToPrevious_Click
On Error Resume Next
    rs.MovePrevious
    UpdateFields
End Sub

'przycisk 3 - CmdGoToNext
Private Sub CmdGoToNext_Click
On Error Resume Next
    rs.MoveNext
    UpdateFields
End Sub

'przycisk 4 - CmdGoToLast
Private Sub CmdGoToLast_Click
On Error Resume Next
    rs.MoveLast
    UpdateFields
End Sub

Private Sub UpdateFields()
For i = 0 to rs.Fields.Count -1
    Me.Controls("TextBox" & i).Text = rs.Fields(i)
Next i
End Sub


_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

07-05-2005 17:45
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
NKris




Typ: neutral
Postów: 15
Zarejestrowany: Apr 2005

Witam...
Sądziłem że jak można powiązać w ADO to DAO również ma taką właściwość. Odświeżam w podobny sposób jak proponujesz losmac ale to jest niewygodne. Nie używam kontrolki Data bo nieobsługuje ona jak obiekt Recordset ustawienia rekordu na szukanym stringu. U mnie to jest tak
rs.Index = "Pol1" 'zdefiniowany index tabeli Pola1
rs.Seek "=", txtWzór.Text 
a
Data1.Recordset.Index = "Pol1" 'Powoduje błąd Run-time error 91
'Object variable or With block wariable not set
Może ktoś podpowie jak rozwiązać ten problem
pozdrawiam...

07-05-2005 21:04
Pokaż profil NKris  Wyślij email do NKris   
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003

Nie kumam, przyjacielu.

Wyszukiwanie w DAO najlepiej zrobić za pomocą SQL.
zap = "SELECT *" & vbcr & _
    "FROM Tabela1" & vbcr & _
    "WHERE ((Tabela1.Pole1) = '" & jakistekst & "');"
Set rs = OpenRecordset(zap)
With rs
Do While not rs.Eof
    MsgBox rs.Fields(1)
    rs.MoveNext
Loop


_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

07-05-2005 22:39
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
karolinavb




Typ: neutral
Postów: 468
Zarejestrowany: Jan 2003

Kris

1. Również według mojej wiedzy, być może się mylę, jest tak jak Maciek pisze, w VB 6 , a o tym środowisku chyba Kris mówisz, jeśli chodzi o DAO nie ma możliwości przyporządkować tak obiektu RecordSet jak w ADO.
Jedyną możliwością jest posłużenie się tą nieszczęsną kontrolką DATA i nie jest to chyba żaden problem można ją ukryć oczywiście .

2 Poniżej błąd jest gdzieś indziej, bo oczywiście to działa

rs.Index = "Pol1" 'zdefiniowany index tabeli Pola1
rs.Seek "=", txtWzór.Text


jak następuje:

jeśli założymy, że dokonano np w Form Load operacji (bo mówimy o planach zmiany RecordSet w kodzie...):

Set oDb = DAO.OpenDatabase(App.Path & "  \_DAOprzykladyRemKaro.mdb" )
Set oRsDao2 = oDb.OpenRecordset("kontakty" )
Set Data1.Recordset = oRsDao2
Me.Data1.Refresh
Me.txtNazwisko.DataField = "Drogi"


to poniższe zadziała:
With oRsDao2
    .Index = "Drogi"
    .Seek "=", txtWzór.Text
    If Not .NoMatch Then
        Data1.Recordset.Bookmark = .Bookmark
    End If
    '''' trzeba też za pomocą Bookmark obsłużyć przeciwny przypadek oczywiście...
End With

(BUG http://support.microsoft.com/default.aspx?scid=kb;en-us;192143)

lecz pamiętać trzeba iż musi to być tzw "table-type" RecordSet.

A jeśli nie mieliśmy przyporządkowanego obiektu RecordSet do kontrolki DATA uprzednio w kodzie , a jedynie we własciwościach, można "uniknąć" błędu wspomnianego w  powyższym linku posługując się metodą Clone i tworząc dla wyszukiwania duplikat obiektu RecordSet w sposób na przykład:

Set oRsClone = Data1.Recordset.Clone

.......

With oRsClone
    .Index = "Drogi"
    .Seek "=", txtWzór.Text
    If Not .NoMatch Then
        Data1.Recordset.Bookmark = .Bookmark
    End If
End With

Masz po prostu inny błąd, polegający najprawdopodobniej na tym, że nie spełniasz żadnego w 2-ch poniższych przypadków:

- ani w okienku właściości kontrolki DATA nie masz wypełnionej pozycji RecordSource ( i w tym przypadku dla Seek powinna to być wybrana jakaś tabela, a RecordSetType powinno być  0- Table)

- ani nie przypisałeś w kodzie do właściwości RecordSet kontrolki DATA żadnego właściwie zainicjowanego obiektu RecordSet ( o cechach ja w punkcie poprzednim), chociażby jak niżej

Set Data1.Recordset = oRsDao2

- lub Twój obiekt RecordSet nie jest zinicjowany
to są moje przypuszczenia, sprawdź to zakładając BreakPoint.


Zmiany RecordSet można natomiast też dokonać chociażby tak:


Me.txtNazwisko.DataField = ""
Set Data1.Recordset = Nothing
Set oRsDao2 = oDb.OpenRecordset("tblkaro" )
Set Data1.Recordset = oRsDao2
Data1.Refresh
Me.txtNazwisko.DataField = "nazwisko"

i tak też robię jak muszę, chociaż oczywiście wolę ADO i oczywiście metoda wyszukiwania podana przez Maćka jest szybsza i ją też właśnie preferuję.

P.S. No i kursor musi być "po stronie klienta" i nie może to być tabela linkowana, o ile pamiętam.

No i nie stosowałabym polskich liter w nazwach kontrolek np txtWzór bo nie zawsze wszystko będzie ok....

[Post edytowany dnia 08-05-2005 07:28 przez karolinavb]


_____________________________________________
Karolina

07-05-2005 23:21
Pokaż profil karolinavb  Wyślij email do karolinavb   
NKris




Typ: neutral
Postów: 15
Zarejestrowany: Apr 2005

Witam
Dzięki za podpowiedzi testuję z SQL i coś z tego będzie. Katolinko cenne informacje kumam już z Data1.Recordset.Seek a txtWzór to tylko na wzór...
Pozdrawiam

09-05-2005 10:20
Pokaż profil NKris  Wyślij email do NKris   
Wszystkich odpowiedzi: 7 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1