Проблема с Adodc (Microsoft Ado data)

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
dimalib
Обычный пользователь
Обычный пользователь
 
Сообщения: 58
Зарегистрирован: 08.12.2003 (Пн) 8:03

Проблема с Adodc (Microsoft Ado data)

Сообщение dimalib » 15.01.2004 (Чт) 13:21

Привет всем. Наверно мне не суждено быть программистом . У меня одна за другим проблемы выскакивает. Работал с элементом Data а с ним не получается set Text1.dataSource=Form1.data1 смысле нельзя вызвать с другой формы. Переключился Adodc1 (Microsoft Ado data) а он не может удалит записи, если на Таблице много полей. Не подскажите как через этих проблем перешагнут. Ругается что “Query is to complex”.
Спасибо за внимание :cry:

amelina
Обычный пользователь
Обычный пользователь
 
Сообщения: 53
Зарегистрирован: 26.11.2003 (Ср) 19:39
Откуда: Москва

Сообщение amelina » 15.01.2004 (Чт) 13:34

Text1.dataSourceЯ идиот! Убейте меня, кто-нибудь!????

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 15.01.2004 (Чт) 16:04

amelina писал(а):Text1.dataSourceЯ идиот! Убейте меня, кто-нибудь!????

А что, собственно, такого? Он может отображать данные из какого-то поля рекордсета...

dimalib, не совсем понятен вопрос. Тебе нужны 2 формы, которые смотрят на один рекордсет и обе его модифицируют что ли? Или просто проблема в передаче данных? Если да, то организуй передачу объектов "рекордсет" хотя бы через свойства что ли...

Что за запрос у тебя обламывается? Как ты этот запрос исполняешь? Ты уверен, что это из-за количества полей? Ты с чего это взял?

А еще лучше опиши проблему конкретнее с примерами.

dimalib
Обычный пользователь
Обычный пользователь
 
Сообщения: 58
Зарегистрирован: 08.12.2003 (Пн) 8:03

Сообщение dimalib » 16.01.2004 (Пт) 7:56

Привет всем. Да у меня две формы которые должны смотреть на один Recordset. Если Data то через свойства никак не получается. Например: Text1.DataField = «имя поля” set Text1.DataSource = Form1.data1 не работает. А если в место Data1 поставит Adodc1 то пашет. Но если задать ОЧЕН много полей то Adodc падает при запросе. Я пробовал таблицей в котором число полей 5-6, тогда Adodc справляется с этой задачкой. :(

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 16.01.2004 (Пт) 13:12

Проблема с ADO и кучей полей описана в MSDN. У тебя ведь Access'ная база?
http://support.microsoft.com/default.as ... bContent=1

Там написано, что проблем при использовании DAO таких быть не должно. Давай все-таки попробуем решить твою первую проблему с одним рекордсетом. Я не совсем понимаю, почему тебе не передать его второй форме. Смотри:

Form1 (там где adocdc1):
Form2 (куда будем передавать)

В коде Form2 пишем:
Код: Выделить всё
Public Sub TakeRecordset(rs as Recordset)
    здесь этот рекордсет сохраняем, например, в локальную переменную или в свой adocdc.
end sub


Все равно везде со ссылками работем. Так что если он будет здесь модифицирован, то автоматом будет модифицирован и в первой форме.

В коде Form1, где показываем форму 2:
Form2.TakeRecordset adodc1.Recordset
Form2.Show vbModal 'или как там ты ее показываешь

Наверно еще adodc1.Refresh понадобится, когда надо обновить данные в связанных контролах...

Если чего не понятно или еще какие проблемы - пиши

dimalib
Обычный пользователь
Обычный пользователь
 
Сообщения: 58
Зарегистрирован: 08.12.2003 (Пн) 8:03

Сообщение dimalib » 16.01.2004 (Пт) 14:56

А у меня таблица состоит из 183 полей. Наверно я понедельник попробую то что предложил, хотя не очень сейчас врубаю. Пока. :wink:

amelina
Обычный пользователь
Обычный пользователь
 
Сообщения: 53
Зарегистрирован: 26.11.2003 (Ср) 19:39
Откуда: Москва

Сообщение amelina » 16.01.2004 (Пт) 15:17

Rainbow писал(а):
amelina писал(а):Text1.dataSourceЯ идиот! Убейте меня, кто-нибудь!????

А что, собственно, такого? Он может отображать данные из какого-то поля рекордсета...


Признаю свою неправоту. Затмение нашло :D

dimalib
Обычный пользователь
Обычный пользователь
 
Сообщения: 58
Зарегистрирован: 08.12.2003 (Пн) 8:03

Сообщение dimalib » 19.01.2004 (Пн) 7:10

Приветь всем. Я опять подошел к этой проблеме с другой стороны

Public db As Database
Public rs As Recordset
Public ws As Workspace

Private Sub Form_Load()
Dim str As String
str = Form1.Text1
Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase("C:\d.mdb")
strsql = "SELECT * FROM t1 WHERE city='" & str & "'"
Set rs = db.OpenRecordset(strsql)
rs.MoveLast
rs.MoveFirst
Text1.Text = rs.Fields("san")
rs.MoveNext

Но у меня при перемещений типа Text3.Text = rs.Fields("city")
rs.MoveNext
при пустом ячейке выдает ошибку Invalid use of Null.
Что делать ? Подскажите PLEASE.

Rainbow а куда писать
Form1 (там где adocdc1):
Form2 (куда будем передавать)

если есть желательно скиньте примерчик с одним Recordset –ом СПАСИБО

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 19.01.2004 (Пн) 13:24

Зачем ты делаешь после открытия MoveLast, а потом MoveFirst?
Тебе надо проверить, что что-то в рекордсете есть. Для этого его надо сначала проверить на Nothing (что вообще открылся), а потом на EOF (что выборка не пустая)

Код: Выделить всё
Set rs = db.OpenRecordset(strsql)
if not rs is nothing then
    if not rs.eof then
        Text1.Text = rs.Fields("san")
    end if
end if


Во вторых, Invalid use of Null у тебя возникает, как я понимаю на строчке Text1.Text = rs.Fields("city"). Конечно, Invalid! Как можно тексту Null присвоить. Для этого есть специальная функция IsNull. Делай так:

Код: Выделить всё
if not IsNull(rs.Fields("city")) then
    Text1.Text = rs.Fields("city")
else
    Text1.Text = ""
end if


dimalib писал(а):Rainbow а куда писать
Form1 (там где adocdc1):
Form2 (куда будем передавать)

Эх... Написано же уже...
Form1
Код: Выделить всё
Option Explicit

Public db As Database
Public rs As Recordset
Public ws As Workspace

Private Sub Command1_Click()
    rs.MoveNext
    If IsNull(rs.Fields("city")) Then
        Text1.Text = ""
    Else
        Text1.Text = rs.Fields("Name2")
    End If
End Sub

Private Sub Command2_Click()
    Form2.TakeRecordset rs
    Form2.Show vbModal
End Sub

Private Sub Form_Load()
Dim str As String
str = Form1.Text1
Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase("c:\db.mdb")

Dim strsql As String
strsql = "SELECT * FROM Table1"
Set rs = db.OpenRecordset(strsql)
If Not rs Is Nothing Then
    If Not rs.EOF Then
        Text1.Text = rs.Fields("city")
    End If
End Sub


Form2
Код: Выделить всё
Option Explicit

Private rs1 As Recordset

Public Sub TakeRecordset(rs As Recordset)
    Set rs1 = rs
End Sub

dimalib
Обычный пользователь
Обычный пользователь
 
Сообщения: 58
Зарегистрирован: 08.12.2003 (Пн) 8:03

Сообщение dimalib » 19.01.2004 (Пн) 14:26

АГРОМНОЕ СПАСИБО Ты действительно золото Rainbow. Я же чайник и поэтому такой назойливый. :D


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

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

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

    TopList