|
|
|
| 2002-2003
На клиенте создаю таблицу (SELECT INTO Table...). Потом открываю форму frm. На frm.Open прописываю источник данных =Select * FROM Table. Пишет, что не существует источник данных Table. В окне базы таблица Table есть. И пока таблицу не "дернешь", форма так и выдает пустой бланк. Подскажите как решить. | |
|
| |
|
|
|
| для начала не использовать такие названия - назовите tblTable | |
|
| |
|
|
|
| На самом деле название другое, и инструкция SQL намного объемнее. С созданием таблицы проблем нет, проблема с динамичным подключением формы к источнику. | |
|
| |
|
|
|
| подозреваю, что надо передернуть коллекцию tabledefs
попробуйте сразу после создания таблицы сделать
currentdb.TableDefs.Refresh | |
|
| |
|
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 намного объемнее" проверьте лишний раз синтаксис | |
|
| |
|
|
|
| Попробую уточнить проблему. Если для импорта таблиц использовать объект 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, не помогает. | |
|
| |
|
|
|
| и еще подробнее, код импорта и формы находятся в разных базах? | |
|
| |
|
|
|
| в смысле може рефрешиться не тот тэйблдеф? | |
|
| |
|
|
|
| Код и формы находятся на базе клиента. При открытии клиента проверяется наличие источника данных на сервере и вываливается модальное окно с предложением обновить данные или работать автономно. Задача упрощается тем, что клиентская база транзакций не осуществляет, а служит только для анализа данных и генерации отчетов. Где-то в ADO проблемка. | |
|
| |
|
|
|
| так еще раз.
есть 2 базы
1-я на сервере с данными (С)
2-я у пользователя (Л)
при запуске базы Л (при желании обноситься) открывается адо коннект к базе С и запукаются SQL инструкции которые создают таблицы в базе Л. Затем в базе Л открываются формы с данными из этих локальных таблиц....
так? | |
|
| |
|
|
|
| Олег, все так. Проблема решена, тема закрыта, всем спасибо. Решение:
1. Обозначить транзакции (рекомедовано), например
cn.BeginTrans
cn.CommitTrans
2. создать еще один объект ADODB.Connection, поддерживающий клиента(Л) в активном состоянии на период транзакций(предположительно) и активировать его, например
Set cnCurrentDB = CurrentProject.Connection
Теперь, после завершения процедуры по импорту данных на сервере(С), формы на клиенте(Л) открываются, листбоксы заполняются, комбобоксы вываливаются.
Как это работает, объяснить затрудняюсь, скорее всего на период импорта данных объект(Л) теряет активность и просто не "знает", что в него влили таблицы.
Зато я знаю, что ADODB.Connection в сравнении с DoCmd.TransferDatabase производительнее, гибче и...изящнее.
Всем удачного EXECUTE, ой, простите, уикенда. Пойду учиться правильно именовать таблицы. | |
|
| |
|
|
|
| хм...
неподумал во ти напсиал что стер..жаль нет делита месаг | |
|
| |