VB не работатет с базой данных

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Kumar001
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 29.04.2003 (Вт) 10:39

VB не работатет с базой данных

Сообщение Kumar001 » 29.04.2003 (Вт) 10:46

Ситуация такая, написал программку, обрабатывающую базу ACCESS, под 98SE работает превосходно, под 2000виндами не работает, не записывает в базу, читает только первое по порядку поле, короче полный облом. Переустанавливал Офис, бейсик, никаких результатов. В чем может быть дело?

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 29.04.2003 (Вт) 11:02

что используешь для доступа к данным? какая версия Access'а? кусочек кода покажи. а то ведь не понятно что именно у тебя там происходит...
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

Kumar001
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 29.04.2003 (Вт) 10:39

Сообщение Kumar001 » 29.04.2003 (Вт) 11:12

Аксес из офиса2000про стоит.Этот аксес поставил с той машины, где все работает. код такой
Set basa = OpenDatabase("c:\Primus\db1.mdb")
Set dyn = basa.OpenRecordset("Firm")
Do Until dyn.EOF
Combo1.AddItem dyn(1)
id(j) = dyn!IdFirm
j = j + 1
dyn.MoveNext
Loop
dyn.Close
basa.close
И в строке additem дает ошибку, что элемент dyn(1) не обнаружен. при записи в базу из текстовых полей показывает, не смотря на то что тектбоксы разные, что все поля забиваются "1"

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 29.04.2003 (Вт) 11:36

Kumar001 писал(а):Аксес из офиса2000про стоит.Этот аксес поставил с той машины, где все работает. код такой
Set basa = OpenDatabase("c:\Primus\db1.mdb")
Set dyn = basa.OpenRecordset("Firm")
Do Until dyn.EOF
Combo1.AddItem dyn(1)
id(j) = dyn!IdFirm
j = j + 1
dyn.MoveNext
Loop
dyn.Close
basa.close
И в строке additem дает ошибку, что элемент dyn(1) не обнаружен. при записи в базу из текстовых полей показывает, не смотря на то что тектбоксы разные, что все поля забиваются "1"


попробуй так: Combo1.AddItem dyn.Fields(1)
либо Combo1.AddItem dyn.Fields("<название_поля>")
либо Combo1.AddItem dyn!<название_поля>

а может у тебя в таблице всего одно поле? тогда учти, что поля нумеруются начиная с 0

а про запись... код записи в базу тоже посмотреть бы...
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

Kumar001
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 29.04.2003 (Вт) 10:39

Сообщение Kumar001 » 29.04.2003 (Вт) 11:45

Я пробовал, но несмотря на то какое поле добавляю, значения заносятся из первого поля. Программа то уже написана и отлажена, только с этой машиной глюки. Может нужно в панели управления че изменять? Не охота винды переустанавливать.

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 29.04.2003 (Вт) 12:02

а у тебя случайно в базе русских имен полей нету?
мож иза них чего...

а еще попробуй DAO обновить.
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

Kumar001
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 29.04.2003 (Вт) 10:39

Сообщение Kumar001 » 29.04.2003 (Вт) 12:12

Русского ничего нет, а каким образом обновить DAO? По моему это из-за виндов2000 глючит, чует моё сердце, нужно в настройке копаться.

ASD
Модератор
Модератор
Аватара пользователя
 
Сообщения: 1758
Зарегистрирован: 07.12.2001 (Пт) 21:08
Откуда: Russia

Сообщение ASD » 29.04.2003 (Вт) 12:18

Очень похоже на глюки с DAO.
Надо было под ADO писать...
Moderator VBStreets
---------------------------

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 29.04.2003 (Вт) 12:21

www.microsoft.com и дальше по поиску в разделе Dounloads
качаешь самое последнее что там есть и устанавливаешь.

либо действительно перепиши под ADO. лучбше будет.
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

Kumar001
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 29.04.2003 (Вт) 10:39

Сообщение Kumar001 » 29.04.2003 (Вт) 12:39

Не умею я под АДО, как это хоть примерно?

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 29.04.2003 (Вт) 12:45

Выложил бы ты куда нить MDB сам либо по почте его что ли послал. А так вообще не ясно что там глбючит зачем и почему. DAO ничуть не глючнее ADO, при этом функцилнальность ADO несколько урезана все такм. Так что переходить с одного на другое смысла нету.

Kumar001
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 29.04.2003 (Вт) 10:39

Сообщение Kumar001 » 29.04.2003 (Вт) 12:50

По почте чё базу прислать или программу?

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 29.04.2003 (Вт) 12:52

Kumar001 писал(а):Не умею я под АДО, как это хоть примерно?

ну примерно так
Код: Выделить всё
Dim CN As ADODB.Connection ' объект для подключения к базе (ссылка на файл базы данных)
Dim RS As ADODB.Recordset ' возвращает результат запроса

Set CN = New ADODB.Connection
CN.Provider = "Microsoft.Jet.OLEDB.4.0" ' провайдер баз данных (для 2000 Access 4 версия
CN.ConnectionString = "путь_к_базе"
CN.Open

Set RS = New ADODB.Recordset
RS.ActiveConnection = CN ' нужно указать какое подключение использовать
RS.Source = "cтрока_подключения_или_SQL-запрос"
RS.Open

A = RS.Fields("<имя_поля>")


в принципе от DAO не очень отличается

а еще поищи на vbstrrets.ru в статьях. на vbrussian.com, тоже в статьях.
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

Kumar001
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 29.04.2003 (Вт) 10:39

Сообщение Kumar001 » 29.04.2003 (Вт) 13:18

Не совсем понял. Есть база данных, необходимо прочесть данные из определенного поля определенной таблице. Плиз кусок кода, а то помру молодой

ASD
Модератор
Модератор
Аватара пользователя
 
Сообщения: 1758
Зарегистрирован: 07.12.2001 (Пт) 21:08
Откуда: Russia

Сообщение ASD » 29.04.2003 (Вт) 13:36

RayShade. Упал чтоли! DAO по функциональности слабее.

А прочитать данные все просто.

Dim db as ADODB.Connection
Dim rs as ADODB.Recordset

db.open "Driver=Microsoft Access Driver (*.mdb);DBQ=C:\my.mdb"
set rs=db.execute("Select * from mytable")
debug.print rs("my_fild")
Moderator VBStreets
---------------------------

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 29.04.2003 (Вт) 13:39

2 ASD А вот и нет :)

Я как то в MSDN нашел статью типа ADO vs DAO vs RDO кажется. Там была такая табличка, типа "что вы можете сделать с помощью этих средствов".

Больше всего + было у DAO как ни странно.

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 29.04.2003 (Вт) 13:43

ну вот так вот.
Код: Выделить всё
Private Sub LoadGroups()
    Set CN = New ADODB.Connection
    CN.Provider = "Microsoft.Jet.OLEDB.4.0"
    CN.ConnectionString = App.Path & "\ntdata.mdb"
    CN.Open
    Set RS = New ADODB.Recordset
    With RS
        .ActiveConnection = CN
        .Source = "tblGroups"
        .Open , , adOpenKeyset, adLockReadOnly
        GroupCount = 0
        Do Until .EOF
            GroupCount = GroupCount + 1
            ReDim Preserve Groups(1 To GroupCount)
            Groups(GroupCount).GroupID = .Fields("GroupID") & vbNullString
            Groups(GroupCount).GroupName = .Fields("GroupName") & vbNullString
            frmMain.tvUsers.Nodes.Add , , "g" & Groups(GroupCount).GroupID, Groups(GroupCount).GroupName, "groupon"
            .MoveNext
        Loop
        .Close
    End With
    Set RS = Nothing
    CN.Close
    Set CN = Nothing
End Sub

кусочек проги.
в принципе код написан как по книжке учили
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

Kumar001
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 29.04.2003 (Вт) 10:39

Сообщение Kumar001 » 29.04.2003 (Вт) 14:15

Блин, блин, блин. Ничего не получается. Но всетаки объясните уважаемые, че за заморочка такая. Аксес один, вб один ПОЧЕМУ не работает-Винды разные. Есть в настройке источник данных, может там ковырнуть?

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 29.04.2003 (Вт) 14:20

Kumar001 писал(а):Блин, блин, блин. Ничего не получается. Но всетаки объясните уважаемые, че за заморочка такая. Аксес один, вб один ПОЧЕМУ не работает-Винды разные. Есть в настройке источник данных, может там ковырнуть?

судя по приведенному тобой выше коду, источник данных тут нипричем.

код лучше покажи. всю процедуру сохранения записи. и процедуру чтения тоже
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

Kumar001
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 29.04.2003 (Вт) 10:39

Сообщение Kumar001 » 29.04.2003 (Вт) 14:32

Private Sub Form_Load()
Dim wrkjet As Workspace
Dim dyn As Recordset
Dim basa As Database
Dim j As Integer
j = 0
Set wrkjet = CreateWorkspace("JetWorkspace", "admin", "", dbUseJet)
Set basa = wrkjet.OpenDatabase("c:\Primus\db1.mdb")
Set dyn = basa.OpenRecordset("Firm")
wrkjet.BeginTrans
Do Until dyn.EOF
Combo1.AddItem dyn!nasv
id(j) = dyn!IdFirm
j = j + 1
dyn.MoveNext
Loop
wrkjet.CommitTrans
dyn.Close
basa.Close

End Sub
в комбо добавляю названия фирм, но добавляются номера из первого поля!!!!

а записываю так:
открываю так же как и выше
потом
dyn.addnew
dynt!pole1=text1.text


dyn!pole10=text10.text
dyn!update
все закрываю.
Че интересно, текстовые поля содержат разные значения, а пытаются записаться все с одинаковым -"1"

Че за ерунда?

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 29.04.2003 (Вт) 14:48

могу предложить такой вариант загрузки
Код: Выделить всё
' References: Microsoft DAO 3.51
Dim db As Database

Const DBPath = "c:\Primus\db1.mdb" ' путь к твоей базе данных

Private Sub Form_Load()
    Dim rs As Recordset
    Set db = OpenDatabase(DBPath)
    Set rs = db.OpenRecordset("SELECT * FROM Firm")
    ' заполняем Combo
    Do Until rs.EOF
        Combo1.AddItem rs.Field("nasv")
        Combo1.ItemData(Combo1.NewIndex) = rs.Fiels("IdFirm") ' номер записи в свойстве ItemData ComboBox'а для каждой записи
        rs.MoveNext
    Loop
    rs.Close
    Set rs = Nothing
End Sub


для записи надо подумать
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

Kumar001
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 29.04.2003 (Вт) 10:39

Сообщение Kumar001 » 29.04.2003 (Вт) 14:57

Я же говорю, проблема какаято внутренняя, щас сделал как ты посоветовал, в комбо опять значения из первого поля. Че делать? У меня жена родит, пока я сдесь

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 29.04.2003 (Вт) 15:01

Kumar001 писал(а):Я же говорю, проблема какаято внутренняя, щас сделал как ты посоветовал, в комбо опять значения из первого поля. Че делать? У меня жена родит, пока я сдесь

и это только на одной машине такое вытворяется, а на остальных все нормально работает?

может действительно что-то с настройками... блин даже не знаю

лучше брось по ка это дело. и иди к жене. а чуть по позже может че и разрешится, на свежую голову.

P.S. прими поздравления :wink:
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

ASD
Модератор
Модератор
Аватара пользователя
 
Сообщения: 1758
Зарегистрирован: 07.12.2001 (Пт) 21:08
Откуда: Russia

Сообщение ASD » 29.04.2003 (Вт) 15:01

Это убраны ненужные вещи.
Вообще можно обойтись несколькими параметрами.
Главное это SQL.
Moderator VBStreets
---------------------------

Kumar001
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 29.04.2003 (Вт) 10:39

Сообщение Kumar001 » 29.04.2003 (Вт) 15:04

Спасибо,но жена в Алмате, а я В Атырау, пока не сделаю, никуда.

Kumar001
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 29.04.2003 (Вт) 10:39

Сообщение Kumar001 » 29.04.2003 (Вт) 15:09

Давай те все вместе подумаем, какая проблем может быть.
Это настройки Аксес или не правильная установка офиса, это неправильная установка бейсика, это может быть виндовская настройка работы с источником данных. Проблема действительно только с виндами2000, с 98 и ХР всё в порядке. Буду очень благодарен за любой совет.

ASD
Модератор
Модератор
Аватара пользователя
 
Сообщения: 1758
Зарегистрирован: 07.12.2001 (Пт) 21:08
Откуда: Russia

Сообщение ASD » 29.04.2003 (Вт) 15:47

если с XP все ок. То чтото криво в 2000.
Moderator VBStreets
---------------------------

Kumar001
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 29.04.2003 (Вт) 10:39

Сообщение Kumar001 » 30.04.2003 (Ср) 13:02

Здорова. Подскажите, в чем проблема. Раньше в таблице поле было числовым, переделал на текстовое, перестали печататься отчеты. Это уже вб в аксесе.


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 257

    TopList