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

Форум: MS ACCESS

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

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

 
 

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

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

тема: форма и источник
 
 автор: alecks_lp   (10.01.2007 в 16:03)   личное сообщение
 
 

2002-2003
На клиенте создаю таблицу (SELECT INTO Table...). Потом открываю форму frm. На frm.Open прописываю источник данных =Select * FROM Table. Пишет, что не существует источник данных Table. В окне базы таблица Table есть. И пока таблицу не "дернешь", форма так и выдает пустой бланк. Подскажите как решить.

  Ответить  
 
 автор: Explorer   (10.01.2007 в 16:38)   личное сообщение
 
 

для начала не использовать такие названия - назовите tblTable

  Ответить  
 
 автор: alecks_lp   (10.01.2007 в 16:52)   личное сообщение
 
 

На самом деле название другое, и инструкция SQL намного объемнее. С созданием таблицы проблем нет, проблема с динамичным подключением формы к источнику.

  Ответить  
 
 автор: osmor   (10.01.2007 в 17:38)   личное сообщение
 
 

подозреваю, что надо передернуть коллекцию tabledefs
попробуйте сразу после создания таблицы сделать
currentdb.TableDefs.Refresh

  Ответить  
 
 автор: Explorer   (10.01.2007 в 17:43)   личное сообщение
9 Кб.
 
 

зачем заставлять людей гадать над неполными и неясными вопросами

конструкция вот такого вида у меня, например, прекрасно работает

Private Sub Form_Open(Cancel As Integer)

DoCmd.RunSQL "SELECT " & "'blah-blah'" & "AS fldOne, " & "'la-la'" & "AS fldTwo INTO tblTableName;"
Me.RecordSource = "SELECT fldOne, fldTwo, fldOne & ' ' & fldTwo AS fldThree FROM tblTableName;"

End Sub

если у вас "инструкция SQL намного объемнее" проверьте лишний раз синтаксис

  Ответить  
 
 автор: alecks_lp   (11.01.2007 в 15:14)   личное сообщение
 
 

Попробую уточнить проблему. Если для импорта таблиц использовать объект DoCmd,
то таблицы мгновенно появляются в окне базы данных и доступны для форм и проблем с работой не возникает.
Теперь, если для обращения к серверу и импорта данных я пользую объект ADODB.Connection, например

Type sql
TableName As String’имя таблицы
CreateTableSQL As String’инструкция SQL на создание таблицы
End Type
Dim sql() as sql’массив с именами таблиц и инструкциями sql
Dim j As Integer
Dim cn As ADODB.Connection

Set cn = New ADODB.Connection
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=\\Operator\Base\ Base_New.mdb”
cn.Open

For j = LBound(sql) To UBound(sql)

cn.Execute sql(j).CreateTableSQL
Next j

то созданные таблицы не отображаются сразу в окне базы данных и недоступны для форм. Чтобы таблицы стали доступны, мне приходится их «дернуть», например, в окне базы данных из меню «таблицы» переключиться в меню «запросы» и обратно, или же повторно открыть форму. Пользователю такое «дергание» наверное не понравится. Вопрос: Как активировать созданные таблицы средствами VBA? Или: где может прятаться ошибка?
К сожалению, Application.CurrentDb.TableDefs.Refresh, не помогает.

  Ответить  
 
 автор: osmor   (11.01.2007 в 15:35)   личное сообщение
 
 

и еще подробнее, код импорта и формы находятся в разных базах?

  Ответить  
 
 автор: Explorer   (11.01.2007 в 15:44)   личное сообщение
 
 

в смысле може рефрешиться не тот тэйблдеф?

  Ответить  
 
 автор: alecks_lp   (11.01.2007 в 17:10)   личное сообщение
 
 

Код и формы находятся на базе клиента. При открытии клиента проверяется наличие источника данных на сервере и вываливается модальное окно с предложением обновить данные или работать автономно. Задача упрощается тем, что клиентская база транзакций не осуществляет, а служит только для анализа данных и генерации отчетов. Где-то в ADO проблемка.

  Ответить  
 
 автор: osmor   (11.01.2007 в 17:15)   личное сообщение
 
 

так еще раз.
есть 2 базы
1-я на сервере с данными (С)
2-я у пользователя (Л)
при запуске базы Л (при желании обноситься) открывается адо коннект к базе С и запукаются SQL инструкции которые создают таблицы в базе Л. Затем в базе Л открываются формы с данными из этих локальных таблиц....
так?

  Ответить  
 
 автор: alecks_lp   (12.01.2007 в 08:17)   личное сообщение
 
 

Олег, все так. Проблема решена, тема закрыта, всем спасибо. Решение:
1. Обозначить транзакции (рекомедовано), например
cn.BeginTrans
cn.CommitTrans
2. создать еще один объект ADODB.Connection, поддерживающий клиента(Л) в активном состоянии на период транзакций(предположительно) и активировать его, например
Set cnCurrentDB = CurrentProject.Connection
Теперь, после завершения процедуры по импорту данных на сервере(С), формы на клиенте(Л) открываются, листбоксы заполняются, комбобоксы вываливаются.
Как это работает, объяснить затрудняюсь, скорее всего на период импорта данных объект(Л) теряет активность и просто не "знает", что в него влили таблицы.
Зато я знаю, что ADODB.Connection в сравнении с DoCmd.TransferDatabase производительнее, гибче и...изящнее.
Всем удачного EXECUTE, ой, простите, уикенда. Пойду учиться правильно именовать таблицы.

  Ответить  
 
 автор: Romiras   (11.01.2007 в 15:58)   личное сообщение
 
 

хм...
неподумал во ти напсиал что стер..жаль нет делита месаг

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