Strona: [  << <   1 2   > >>  ]  z  2     
Autor Temat: Bazy danych - jak to zrobić?
Viper87



Typ: neutral
Postów: 490
Zarejestrowany: Oct 2002
Bazy danych - jak to zrobić?

Witam!

Ostatnio obserwuję, że dużo osób na forum pyta o obsługę baz danych. Ja więc też się dołączę. Moje pytanie będzie prozaiczne:

Jak w Visual Basic zrobić prawdziwą bazę danych? Chodzi mi o to, że np. piszę program do nauki słówek. Program zapisuje dane do pliku w postaci bazy danych, a potem tylko on taki plik potrafi odczytać. Próbowałem zrobić to na INI, ale za dużo zabawy.

Pozdrawiam

[Post edytowany dnia 19-09-2004 09:54 przez Viper87]


_____________________________________________
Viper

"Savoir c`est prevoir, prevoir c`est prevenir". 
(Wiedzieć to przewidzieć, przewidzieć to zapobiegać) 


18-09-2004 18:31
Pokaż profil Viper87  Wyślij email do Viper87   Odwiedź stronę Viper87  
Chudy
[TLHW]Wiktor



Typ: moderator
Postów: 574
Zarejestrowany: Aug 2002

W Workshopie w dziale o bazach danych jest taki sampel jak zapisywać Typy do pliku.


_____________________________________________
Projekt "Thunder Cannons" nadchodzi...

18-09-2004 18:41
Pokaż profil Chudy  Wyślij email do Chudy   Odwiedź stronę Chudy       1220895
Viper87



Typ: neutral
Postów: 490
Zarejestrowany: Oct 2002

Błagam, tylko nie odsyłaj mnie do działu Workshop. Tam są pseudo bazy danyh - tak naprawdę to zwykłe pliki tekstowe. (No chyba, że coś przeoczyłem, to podaj dokładny link to sampla). Mnie chodzi o utworzenie pliku, który po podglądnięciu np. w Total Commanderze będzie zbiorem "krzaczków". Chciałbym utworzyć coś jak pliki *.mdb. Słyszałem, że wiąże się to jakoś z ADO i DAO. Rozumiesz?


_____________________________________________
Viper

"Savoir c`est prevoir, prevoir c`est prevenir". 
(Wiedzieć to przewidzieć, przewidzieć to zapobiegać) 


18-09-2004 19:12
Pokaż profil Viper87  Wyślij email do Viper87   Odwiedź stronę Viper87  
karolinavb




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

To nie jest prawda jest na http://www.coderscity.pl/no-vb4all w menu z lewej strony do ściagnięcia VBFAQ i jest tam rozdział o tworzeniu bazy danych za pomocą DAO i ADOX cytuję :

Bazę Accessa jak najbardziej; można do tego użyć DAO ...:

  Dim dbe As DAO.DBEngine
  Dim db As DAO.Database
  Dim tbl As DAO.TableDef
  Dim idx As DAO.Index
  Dim fld As DAO.Field
  Dim x As DAO.Property

  Set dbe = New DAO.DBEngine

  'Stworzenie bazy (fizyczne)
  Set db = dbe.CreateDatabase("c:\MyDB.mdb", dbLangGeneral)

  'Stworzenie tabeli
  Set tbl = db.CreateTableDef("MyTable" )

  'Dodanie pol do tabeli (rozne sposoby)
  Set fld = tbl.CreateField("ID", dbLong)
  fld.Attributes = dbAutoIncrField
  tbl.Fields.Append fld

  Set fld = New DAO.Field
  fld.Name = "FirstName"
  fld.Type = dbText
  fld.Size = 70
  fld.AllowZeroLength = True
  fld.DefaultValue = "Michal"
  tbl.Fields.Append fld

  tbl.Fields.Append tbl.CreateField("LastName", dbText, 20)

  'Stworzenie tabeli (fizyczne)
  db.TableDefs.Append tbl

  'Stworzenie indeksu
  Set idx = tbl.CreateIndex("ID_idx" )

  'Dodanie pola (pól) do indeksu
  Set fld = idx.CreateField("ID" )

  'Ustawienie właściwości indeksu
  idx.Unique = True
  idx.Primary = True
  idx.Required = True

  'Dodanie pola
  idx.Fields.Append fld

  'Stworzenie indeksu (fizyczne)
  tbl.Indexes.Append idx


... albo ADO:


  Dim cat As ADOX.Catalog
  Dim tbl As ADOX.Table

  Set cat = New ADOX.Catalog
  cat.Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Text1.Text
  '  - albo -
  'cat.Create "Provider=Microsoft.Jet.OLEDB.3.51.;Data Source=" & Text1.Text
  '
  'użycie providera w wersji 3.51 spowoduje utworzenie bazy w formacie
  'Accessa 97, a providera w wersji 4 - Accessa 2000

  Set tbl = New ADOX.Table
  tbl.Name = "MyTable"
  cat.Tables.Append tbl
  tbl.Columns.Append "MyFieldA", adVarWChar, 20
  'dla wersji 3.51:
  'tbl.Columns.Append "MyFieldA", adVarChar, 20


Bazę na SQL Server'ze można też stworzyć używając SQL-DMO. Dla wersji 6.5 może to wyglądać tak:


  Dim x As SQLOLE.SQLServer, db As SQLOLE.Database
  Dim tbl As SQLOLE.Table, col As SQLOLE.Column
 
  Set x = New SQLOLE.SQLServer
  Set db = New SQLOLE.Database
 
  x.LoginTimeout = 5
  x.Connect "MyServer", "MyUID", "MyPwd"
  db.Name = "MyDB"
  x.Databases.Add db
 
  Set col = New SQLOLE.Column
  col.Name = "MyFieldA"
  col.Datatype = "varchar"
  col.Length = 20
 
  Set tbl = New SQLOLE.Table
  tbl.Name = "MyTable"
  tbl.Columns.Add col
  db.Tables.Add tbl
 
  x.DisConnect


Dla SQL Server'a 7.0 jedyna zmiana to "SQLDMO" zamiast "SQLOLE":


  Dim x As New SQLDMO.SQLServer, db As SQLDMO.Database
  Dim tbl As SQLDMO.Table, col As SQLDMO.Column
 
  Set x = New SQLDMO.SQLServer
  Set db = New SQLDMO.Database
 
  x.LoginTimeout = 5
  x.Connect "MyServer", "MyUID", "MyPwd"
  db.Name = "MyDB"
  x.Databases.Add db
 
  Set col = New SQLDMO.Column
  col.Name = "MyFieldA"
  col.Datatype = "varchar"
  col.Length = 20
 
  Set tbl = New SQLDMO.Table
  tbl.Name = "MyTable"
  tbl.Columns.Add col
  db.Tables.Add tbl
 
  x.DisConnect

Reszta w helpie ADOX i DAO mozna zajrzeć nawet do pomocy Accessa dla DAO (po polsku) z powodzeniem i małymi zmianami można stosować w VB


_____________________________________________
Karolina

18-09-2004 20:44
Pokaż profil karolinavb  Wyślij email do karolinavb   
Viper87



Typ: neutral
Postów: 490
Zarejestrowany: Oct 2002

Dziękuję za odpowiedź, ale chciałbym poinformować, że mam VBFAQ i czytałem cytowany fragment. Problem jednak polega na tym, że nie wiem jakie biblioteki powinny być załadowane, ebym mół użyć tego kodu(inaczej po przekopiowaniu do VB pojawia się błąd). Do tego zauważ, że tam wszędzie jest pokazane jak tworzyć bazę, dodawać pola itd. A nie ma opisu jak odczytywać...

Co do helpa do ADO i DAO, to mogłabyś mi dokładniej powiedzieć skąd je mogę pobrać?


_____________________________________________
Viper

"Savoir c`est prevoir, prevoir c`est prevenir". 
(Wiedzieć to przewidzieć, przewidzieć to zapobiegać) 


18-09-2004 22:05
Pokaż profil Viper87  Wyślij email do Viper87   Odwiedź stronę Viper87  
losmac
"profesorek"




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

Karolinko,

..ale ten kod tworzy bazę danych i wrzuca jeden przykładowy rekord...

Viper87, czy o to Ci chodziło, czy za każdym razem chcesz tworzyć nową bazę danych i dodawać jakąś liczbę rekordów?
Czy raczej chodzi Ci o obsługę bazy danych (dodawanie, edycja, usuwanie rekordów)?


_____________________________________________
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ś

18-09-2004 22:06
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
Viper87



Typ: neutral
Postów: 490
Zarejestrowany: Oct 2002

Może zastosuję się do rady Marcina i nie będę używał słów, których znaczenia nie jestem pewien. A więc opisowo sprawa ma się tak:

-piszę program do nauki słówek różnych języków
-słówka te użytkownik sam dodaje. Tzn. chciałbym, aby w programie była tabela z dwoma kolumnami: "oryginał" i "tłumaczenie". Użytkownik wypełnia taką tabelę i klika "Zapisz jako...", podaje nazwę pliku i program tworzy plik bazy danych z zapisanymi w niej słówkami.
-Użytkownik teraz otwiera taki plik w moim programie i uczy się zawartych w niej słówek.

Ogólnie wchyba dość proste, ale kompletnie nie wiem jak się za te dwie części technicznie zabrać. Nic-ZERO. Zrobiłem to na plikach INI, ale kod jest zbyt długi i zagmatwany (do tego taki plik każdy może edytować i coś w nim zepsuć nawet jak go zakoduję), a do tego trudno jest wstawiać jakieś nowe pozycje między już istniejące, czy jakieś usuwać.

Gdyby ktoś mógłby mi powiedzieć jakiego sposobu użyć aby coś takiego napisać, to byłbym wdzięczny.

Czyli Losmac, chodziło mi chyba o jedno i drugie: jak tworzyć bazę danych i jak ją edytować...

Sorry, jeśli znów niekomunikatywnie się wyraziłem, ale bardziej obrazowo już nie umiem.

[Post edytowany dnia 18-09-2004 22:16 przez Viper87]


_____________________________________________
Viper

"Savoir c`est prevoir, prevoir c`est prevenir". 
(Wiedzieć to przewidzieć, przewidzieć to zapobiegać) 


18-09-2004 22:14
Pokaż profil Viper87  Wyślij email do Viper87   Odwiedź stronę Viper87  
karolinavb




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

Ponieważ post jest umioeszczony w dziale VB a nie VBA rozumiem z Twojej wypowiedzi chodzi Ci o napisanie takiej aplikacji w Visual Basic, a nie w środowisku Microsoft Access. I jak rozumiem chcesz tylko wiedzieć jak obsługiwać bazy danych typu np. MS Access w środowisku Visual  Basic np. 6.0. Spróbuję opisać prosty przykład.

I. Obsługa baz danych za pomocą ADO, w projekcie takiej aplikacji należy:

1.W opcji menu Project/References dodać referencję do biblioteki Microsoft AciveX Data Objects 2.X  Library, gdzie X jest numerem wersji dostępnym na Twoim komputerze (widać będzie w okienku np. 2.1, 2.5)

2.W opcji menu Project/Components dodać komponent Microsoft ADO Data Control (MSADODC.ocx

3.Wówczas w Toolbox po lewej pojawi się kontrolka ADODC. Wstawić tą kontrolkę do formy, niech ta kontrolka nazywa się np. ADODC1

4.Przy istniejącej bazie danych w oknie Property Page kontrolki ADODC1 (prawy klawisz myszki na kontrolce)

    a) w zakładce General wybrać opcję np. Use Connection String i wcisnąć klawisz Build

    b) Właściwości Łącza Bazy Danych zakładka Dostawca wybrać dostawcę: Microsoft Jet 4.0 OLE DB Provider (lub 3.51 w zależności od tego, co jest dostępne na Twoim komputerze)

    c) w zakładce Połączenie w opcji Wybierz lub Wprowadź Nazwę Bazy danych: wskazać dostępną bazę danych przykładowo "C:\MAGAZYN_VB\_BAZA_PROSTA\baza.mdb"

    d) wcisnąć klawisz Testuj Połączenie, powinien być komunikat "Połączenie powiodło się". Ok.

    e) w Property Page kontrolki ADODC1 następnie wybrać zakładkę RecordSource i tam w opcji Command Type wybrać np. 2- acmdTable, w opcji Table or Stored Procedure Name wybrać tabelę z bazy danych, która Cię interesuje np. tblSlowka

5. Następnie dodać do formy np. 2 kontrolki TextBox (TextBox1 i TextBox2) i w okienku właściwości
wypełnić następujące właściwości np. dla TextBox1

    a) źródło danych DataSource - ADODC1 ( ukaże się w listboxie tej właściwości)

    b) DataField - pole tabeli związane z TextBoxem (edytowanie lub pokazywane w tej kontrolce) np. "slowopolskie" ( lista dostępnych pól tabeli tez pokaże się w listboxie tej właściwości)

Oczywiście dla 2-giej kontrolki Textbox2 analogicznie inne pole np. "slowoangielskie"
Kontrolka ADODC1 umożliwi poruszanie się po rekordach tabeli (strzałki). Dodanie nowego rekordu można wykonać dodając do formy kontrolkę Command Button. Nazwijmy go  np. cmdDodajNowyADO. W zdarzeniu Click tej kontrolki wpisać kod np jak niżej:

Private Sub cmdDodajNowyADO_Click()
Me.Adodc1.Recordset.AddNew
End Sub

Doda to nowy rekord w tabeli i umożliwi edycję zawartości pól w opisywanych wcześniej kontrolkach TextBox1 i TextBox2

Poruszanie się po rekordach wybranej tabeli we właściwościach kontrolki ADODC1 można realizować programowo poprzez komendy np.

Me.Adodc1.Recordset.MoveFirst
Me.Adodc1.Recordset.MoveNext
Me.Adodc1.Recordset.MoveLast
Me.Adodc1.Recordset.MovePrevious
Me.Adodc1.Recordset.Delete

II. Obsługa baz danych za pomocą DAO, w projekcie aplikacji należy

1. W opcji menu Project/References dodać referencje do biblioteki  Microsoft DAO 3.51 Library 3.51- jest numerem wersji dostępnym na Twoim komputerze (widać będzie w okienku np.3.51 lub 4.0)

2. Kontrolka obsługująca tę bibliotekę jest już w Toolbox i nazywa się Data. Wstawić tę kontrolkę do formy, niech ta kontrolka nazywa się np. Data1

3. Po wstawieniu tej kontrolki do formy należy przy istniejącej bazie danych w oknie właściwości tej kontrolki

    a) wypełnić właściwość Connect wybierając z listy  np. Access

    b) wypełnić właściwość DataBaseName,  wskazać dostępną bazę danych przykładowo "C:\MAGAZYN_VB\_BAZA_PROSTA\baza.mdb"

4. Następnie dodać do formy np. 2 kontrolki TextBox (TextBox1 i TextBox2) i w okienku ich właściwości wypełnić następujące właściwości np. dla kontrolki Textbox1:

    a) źródło danych DataSource - Data1  (ukaże się w listboxie tej właściwości)

    b) DataField pole tabeli związane z TextBoxem (edytowanie lub pokazywane w tej kontrolce) np. "slowopolskie" ( lista dostępnych pól tabeli tez pokaże się w listboxie tej właściwości)

Oczywiście dla 2-giej kontrolki Textbox2 analogicznie

Kontrolka Data1 umożliwi poruszanie się po rekordach tabeli (strzałki). Dodanie nowego rekordu można wykonać dodając do formy kontrolkę Command Button. Nazwijmy ją np. cmdDodajNowyDAO. W zdarzeniu Click tej kontrolki wpisać kod np jak niżej

Private Sub cmdDodajNowyDAO_Click()
Me.Data1.Recordset.AddNew
End Sub

Doda to nowy rekord I umożliwi edycję zawartości pól w opisywanych wcześniej kontrolkach TextBox
Programowe poruszanie się po rekordach:
Me.Data1.Recordset.MoveFirst i analogicznie jak w ADO.
W obu wypadkach należy zwrócić uwagę na właściwość Recordset, z którą związane są metody umożliwiające poruszanie się po tabeli bazy danych.

Nie należy na 1-dnej formie łączyć kontrolek Data i ADODC

Aby skorzystać z progamowego tworzenia nowej bazy danych  za pomocą ADOX -od miejsca "... albo ADO"  należy w opcji menu Project/References dodać referencje do biblioteki Microsoft ADO Ext. 2.7 for DDL and Security (msadox.dll). Dla wykorzystania DAO wystarczy referencja do Microsoft DAO 3.51 Library (lub 4.0) - od miejsca  "Bazę Accessa jak najbardziej; można do tego użyć DAO ..." . To oczywiście taki najbardziej prosty przykład tylko. Oczywiście sma bazę możesz też stworzyć w MS Access i skorzystac z niej w środowisku Visual basic ( np wersja 6.0)

P.S. Maćku a gdzie w zacytownym poprzednio przeze mnie fragmencie jest dodanie rekordu ?


_____________________________________________
Karolina

19-09-2004 07:57
Pokaż profil karolinavb  Wyślij email do karolinavb   
Viper87



Typ: neutral
Postów: 490
Zarejestrowany: Oct 2002

Tak, wydaje mi się, że właśnie o to mi chodziło.
Na razie jednak nie mam czasu wypróbować, bo muszę wyjść-zrobię to po południu. Wtedy się ewentualnie odezwę. Natomiast już teraz mam jeszcze dwa pytania do Ciebie:
-Czy te pola w tabeli mają numery? Potrzebuję zrobić opcję losowego wyboru słowa (a nie tylko po kolei, jak widzę w opcjach - MoveNext itp.)
-czy każda baza danych w VB musi być koniecznie bazą Accessa o rozszerzeniu *.mdb? Znam cała masę programów (głównie w Delphi), które działają na własnych formatach baz danych o jakimś własnym, wymyślonym rozszerzeniu.

Pozdrowienia.

[Post edytowany dnia 19-09-2004 09:44 przez Viper87]


_____________________________________________
Viper

"Savoir c`est prevoir, prevoir c`est prevenir". 
(Wiedzieć to przewidzieć, przewidzieć to zapobiegać) 


19-09-2004 09:43
Pokaż profil Viper87  Wyślij email do Viper87   Odwiedź stronę Viper87  
losmac
"profesorek"




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

Ad 1)
Mają numery od 0 do ....

Ad 2)
Nie musi być bazą danych Access'a. Ale chciałeś przykład, więc go dostałeś.

Co do reszty stwierdzenia, że inne działają na własnych formatach (tak) i o wymyślonych  rozszerzeniach...
To się nie mylisz, ale Access ma tę zaletę, że pewne fragmenty kodu niezbędne do obsługi Twojej bazy będziesz mógł skopiować wprost. Druga rzecz, to taka, że możesz bazę danych Access'a ukryć pod innym rozszerzeniem i domyślnie bazka ta nie będzie otwierała się w Accessie. Bajer polega na tym, że łączącz dane do swojego programu (otwierając bazę danych, by mieć dostęp do jej wszystkich obiektów) wystawrczy, że wskażesz ten "właśny format", np.:

set dbs = OpenDtabase("Crogram FilesSlowkaSlowka.slo"


Jeśli chodzi o obsługę baz danych, KUP KSIĄŻKĘ i poznaj jak właściwie projektować bazy danych, zanim usiądziesz do realizacji swego projektu!

[Post edytowany dnia 19-09-2004 14:02 przez losmac]


_____________________________________________
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ś

19-09-2004 14:01
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
Viper87



Typ: neutral
Postów: 490
Zarejestrowany: Oct 2002

Witaj!

ad 1) Cieszę się, że mają numery. Jak więc odnieść się do konkretnego numeru?

ad 2) To  dobry pomysł z tą zmianą rozszerzenia, jednak bardzo ciekawi mnie w jaki sposoób zrobić w VB taki własny format bazy danych?

Co do książki, to sobie taką kupiłem z rok temu. Leży sobie na półce i nic poza tym. Nic się z nije nie mogłem nauczyć. Nazywa się "Programowanie baz danych w VB-Biblia".
No chyba, że znasz jakąś lepszą pozycję?


_____________________________________________
Viper

"Savoir c`est prevoir, prevoir c`est prevenir". 
(Wiedzieć to przewidzieć, przewidzieć to zapobiegać) 


19-09-2004 14:14
Pokaż profil Viper87  Wyślij email do Viper87   Odwiedź stronę Viper87  
karolinavb




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

Przykładowo postać tabeli

Pola (nazwy pól)  slowoangielskie    slowopolskie

rekord 1                cat                            kot
rekord 2                make-up                  makijaż
.....                        ........                        .......
rekord n-ty            baker                      piekarz

Metody
Me.Adodc1.Recordset.MoveFirst
Me.Adodc1.Recordset.MoveNext
Me.Adodc1.Recordset.MoveLast
Me.Adodc1.Recordset.MovePrevious
Me.Adodc1.Recordset.Delete

Me.Adodc1.Recordset.Move NumRecords, Start


Służą do poruszania się po rekordach ( jakby w pionie tabeli), interesujaca Cie metoda to move, pola można obsługiwać poprzez
1. dostęp do pola np. o nazwie "slowoangielskie"
- przez numer pola (numerowane od zera) -  Me.Adodc1.Recordset.Fields(0).Value
-  przez nazwę pola - Me.Adodc1.Recordset.Fields("slowoangielskie" ).Value


Rodzaje baz danych dostępne dla kontrolki DAO czyli Data są widoczne w liscie rozwijajacej się w oknie właściwości dla właściwości Connect tej kontrolki np. u mnie
Access, dBase, Foxpro, Lotus, Paradox, Text itd...


_____________________________________________
Karolina

19-09-2004 14:26
Pokaż profil karolinavb  Wyślij email do karolinavb   
karolinavb




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

Maciek ma rację też namawiam do bazy danych MS Access zwłaszcza jak się zaczyna pracę z bazami danych.


_____________________________________________
Karolina

19-09-2004 14:29
Pokaż profil karolinavb  Wyślij email do karolinavb   
Viper87



Typ: neutral
Postów: 490
Zarejestrowany: Oct 2002

Udało mi się stworzyć programowo nową bazę danych (Do Referencji w VB dodałem bibliotekę "Microsoft ADO Ext. for DLL and security". To dobrze?). Udaje mi się też spokojnie dodawać do niej rekordy i pola. Nie mogę jednak sobie poradzić z komendą otwierającą daną bazę danych z poziomu VB. Ktoś mógłby mi pomóc?

P.S Korzystam oczywiście a ADO a sposób pt:
Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\baza1.mdb;Persist Security Info=False"
nie chce działać...

[Post edytowany dnia 19-09-2004 18:18 przez Viper87]


_____________________________________________
Viper

"Savoir c`est prevoir, prevoir c`est prevenir". 
(Wiedzieć to przewidzieć, przewidzieć to zapobiegać) 


19-09-2004 18:16
Pokaż profil Viper87  Wyślij email do Viper87   Odwiedź stronę Viper87  
karolinavb




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

Łańcuch połączenia jest poprawny (zakładając, że ścieżka do bazy danych jest właściwa), sprawdź pozostałe właściwości ADODC,jaki jest komunikat błędu (bo chyba masz obsługę błędów ?)


_____________________________________________
Karolina

19-09-2004 21:37
Pokaż profil karolinavb  Wyślij email do karolinavb   
Viper87



Typ: neutral
Postów: 490
Zarejestrowany: Oct 2002

Komunikat: [Microsoft][Menadżer plików ODBC]Nie można odnaleźć nazwy źródła danych, a nie ma podanego sterownika domyślnego.


_____________________________________________
Viper

"Savoir c`est prevoir, prevoir c`est prevenir". 
(Wiedzieć to przewidzieć, przewidzieć to zapobiegać) 


19-09-2004 21:41
Pokaż profil Viper87  Wyślij email do Viper87   Odwiedź stronę Viper87  
karolinavb




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

Są takie możliwości przyczyny błędu:

Kontrolka ADODC1 ma w okienku Property Page (General- Use Connection String-Build ; zakładka Dostawca) ustawioną właściwość "Dostawca" na "Microsoft OLE DB Provider for ODBC Drivers", a kontrolki korzystające z ADODC1 jako źródła danych ( np.TextBox1) mają w oknie właściwości wcześniej ustawione właściwości

- DataField - na określone pole
- DataSource - na ADODC1
wówczas występuje taki komunikat.

Jeśli chcesz w kodzie ustawiać właściwość ConnectionString wtedy w okienku "Porperty Page" kontrolki ADODC1 w zakładce "General" powinno być zaznaczona opcja "Use Connection String", ale pole to powinno być puste. W zasadzie w kodzie powinno się najpierw ustalać połączenie z bazą danych a dopiero potem ustalać właściwości DataSource i DataField

Np: (przypuścmy w Form_load)
Dim strPath As String
strPath = "C:\MAGAZYN_VB\_BAZA_PROSTA\baza.mdb"

With Adodc1
      .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
      "Persist Security Info=False;Data Source=" & strPath & _
      "; Mode=Read|Write"
      .CursorLocation = adUseClient
      .CursorType = adOpenStatic
      .CommandType = adCmdTable
      .RecordSource = "tblludzie"
      .Refresh
End With

With TextBox1
  Set .DataSource = Adodc1
  .DataField = "Imię"
End With

ale komunikat może dotyczyć innej kontrolki i innej linii kodu trudno tu gdybać bez znajomości całości...


_____________________________________________
Karolina

20-09-2004 08:29
Pokaż profil karolinavb  Wyślij email do karolinavb   
losmac
"profesorek"




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

Możesz zrobić swój własny format bazy danych i też będzie to dość szybkie, przykład:

Option Explicit

Type Uczen
    Id As Long
    Nazwisko As String * 30
    Imie As String * 50
    DataUr As String * 10
End Type

Sub ZapiszRekord()
Dim rek As Uczen
Dim numFile As Long, i As Long


numFile = FreeFile
Open "\uczniowie.txt" For Random Access Write As #numFile
    For i = 1 To 10
        rek.Id = i
        rek.Nazwisko = String(i, "A"
        rek.Imie = String(i, "B"
        rek.DataUr = i & "-" & i & "-1988"
        Put #numFile, i, rek
    Next i
Close #numFile

End Sub

Sub odczyt()
    OdczytajRekord 5
End Sub

Sub OdczytajRekord(ktory As Long)
Dim rek As Uczen
Dim numFile As Long, i As Long


numFile = FreeFile
Open "\uczniowie.txt" For Random Access Read As #numFile
    Get #numFile, ktory, rek
Close #numFile

MsgBox rek.Id & vbCr & rek.Nazwisko & vbCr & rek.Imie & vbCr & rek.DataUr, vbInformation, "Uczeń " & ktory

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ś

20-09-2004 17:42
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
Viper87



Typ: neutral
Postów: 490
Zarejestrowany: Oct 2002

Przepraszam, że piszę dopiero teraz, ale miałem strasznie dużo zajęć. Twój pomysł, Losmac bardzo przypadł mi do gustu-to właśnie to o co mi chodziło. Jednak bazy danych Accessa są bardziej skomplikowane, a ja raptem potrzebuję 4 kolumny w tabeli na krzyż. Mimo wszytsko obiecuję, że Accessa, też się będę uczył .

Co do Twojego sposobu, to prosiłbym Cię o dodanie do każdej linijki Twojego kodu, komentarza co robi. (Np. opisu funkcji String nigdzie nie znalazłem). Czy dałoby się przerobić to wszytsko do takiej postaci, żebym miał takie funkcje:

ZapiszNowyRekord(Numer, słówko polskie, słówko angielskie)

OdczytajPole - tu chciałbym, aby program odczytał mi wskazane przeze mnie pole-np linia 200 z kolumny "Słówko polskie"

Wyszukaj(nazwa_pola) - np. wyszukuje mi słowo "kot" w kolumnie "Słówko polskie"

Gdybyś mógł mi w tym pomóc, chociaż podpowiedzieć czego użyć, to byłbym zobowiązany.

Pozdrawiam.

P.S Jeszcze przypomniały mi się dwie sprawy:
1.) Chciałbym tę bazę zakodować tak, żeby po edytowaniu pliku w Hex Edytorze nie było można odczytać zapisanych danych.
2.) Jak mam napisać komendę skoku do ostatniego rekordu???

[Post edytowany dnia 24-09-2004 17:11 przez Viper87]


_____________________________________________
Viper

"Savoir c`est prevoir, prevoir c`est prevenir". 
(Wiedzieć to przewidzieć, przewidzieć to zapobiegać) 


24-09-2004 16:33
Pokaż profil Viper87  Wyślij email do Viper87   Odwiedź stronę Viper87  
Viper87



Typ: neutral
Postów: 490
Zarejestrowany: Oct 2002
No i kolejny problem

Czy nie dałoby się zrobić tak, żeby długoś pola była zależna od długości wyrazu?


_____________________________________________
Viper

"Savoir c`est prevoir, prevoir c`est prevenir". 
(Wiedzieć to przewidzieć, przewidzieć to zapobiegać) 


24-09-2004 18:22
Pokaż profil Viper87  Wyślij email do Viper87   Odwiedź stronę Viper87  
Wszystkich odpowiedzi: 23 :: Maxymalnie na stronę: 20
Strona: [  << <   1 2   > >>  ]  z  2