|
2 Кб. |
|
| Доброе день! у меня такой вопрос. Мне нужно сделать поиск по БД и что бы после окончания формировалась временная таблица SearchResults с результатами поиска(таблица уже создана заранее , просто она заполняется результами). При новом поиске надо что бы эта таблица очищалась. И вот вопрос как можно очищать таблицу от результатов на vba?
Если что то таблица содержить три поля , это идентификатор строки и столбца(тк поиск ведется по нескольким базам и чтобы потом узнать откуда что берется) и поле с названием организации.
в прикрепленном файле таблица . Код не прикрепляю тк он у меня не работает. И в общем стыдно его даже и прикреплять тк я понимаю что он не правилен в корне | |
|
| |
|
|
|
| "delete * from tbl ..."
однако, если в БД установлены связи, то может и ругнуться | |
|
| |
|
|
|
| а надо предварительно объялять переменные ? tbl - название таблицы? | |
|
| |
|
|
|
| Может это поможет
Справочник разработчика MSAccess
Очистка таблицы от данных
Процедура полностью очищает от данных таблицу заданную в параметре strTableName. Не проводилось тестирование на удаление в связанных таблицах и хорошо бы переделать что бы работало вне зависимости от применяемых библиотек, что то типа docmd.RunSQL.
Public Sub ClearTable(strTableName As String)
Dim strSQL As String
On Error GoTo m1
SysCmd acSysCmdSetStatus, "Очищаю таблицу - " & strTableName
strSQL = "DELETE FROM " & strTableName
CurrentDb.Execute strSQL
SysCmd acSysCmdClearStatus
Exit Sub
m1:
MsgBox "Произошла ошибка №" & Err.Number & " при очистке таблицы " & strTableName, vbCritical
Err.Clear
End Sub | |
|
| |
|
|
|
| а где можно скачать справочник программиста или хотя бы полное название я поищу.. А пример чего то не пашет , ругается что объявленная процедура не соответствует описанию события или имеет похожее название | |
|
| |
|
|
|
| http://hiprog.com/index.php?option=com_content&task=view&id=729 | |
|
| |
|
|
|
| понятно разобраться бы еще с этой процедурой | |
|
| |
|
|
|
| она должна работать.
Где Вы ее используете? как вызываете? | |
|
| |
|
2 Кб. |
|
| Уважаемый osmor я ее пытаюсь вызывать нажатием на кнопку. Использую в форме, на одной из вкладок. Очень жду ваших комментариев, ибо встал в тупиковое положение.
Конкретно сейчас у меня на кнопку повешено вот такой код , по идее он должен формировать временную таблицу с двумя полями. (но правда нифига не работает)
Private Sub Search_Click()
Dim Poisk As Database 'Poisk íàçâàíèå âêëàäêè ãäå ðàñïîëàãàåòñÿ êíîïêà
Dim SearchResults As DAO.TableDef 'SearchResults íàçâàíèå òàáëèöû
Dim fld As DAO.field ' îáúÿâëÿþ ïåðåìåííóþ
Set SearchResults = Database.CreateTableDef![Ðåçóëüòàòû ïîèñêà] ' íàçâàíèå âðåìåííîé òàáëèöû
Set fld = SearchResults.CreateField("Id_Rec", dbInteger, 10) 'ôîðìèðîâàíèå ïîëÿ
SearchResults.Fields.Append fld ' äîáàâëÿåì ïîëå â ñåìåéñòâî
Set fld = SearchResults.CreateField("Íàèìåíîâàíèå", dbString, 255) 'åùå îäíîãî ïîëÿ
SearchResults.Fields.Append fld ' äîáàâëÿåì åùå îäíî ïîëå â ñåìåéñòâî Fields
Poisk.TableDefs.Append SearchResults 'äîáàâëÿåì òàáëèöó ê ñåìåéñòâó TableDefs
Poisk.TableDefs.Refresh ' îáíîâëÿåì ñåìåéñòâî TableDefs
End Sub
|
упс... не знаю что с этой кодировкой | |
|
| |
|
|
|
| Вот рабочий код
http://www.hiprog.com/index.php?option=com_content&task=view&id=327
У вас используется не определенная переменная Database и описанная но не определеная переменная Poisk и неверно использован метод CreateTableDef
по идее должно быть:
Private Sub Search_Click()
Dim Poisk As Database
Dim SearchResults As DAO.TableDef
Dim fld As DAO.field
set Poisk = currentDB
Set SearchResults = Poisk .CreateTableDef("ИмяВашейТаблицы")
Set fld = SearchResults.CreateField("Id_Rec", dbInteger, 10)
SearchResults.Fields.Append fld
Set fld = SearchResults.CreateField("ПОЛЕ", dbString, 255)
SearchResults.Fields.Append fld
Poisk.TableDefs.Append SearchResults
Poisk.TableDefs.Refresh
End Sub
|
Почему не работает удаление не понятно - код совершенно рабочий | |
|
| |
|
|
|
| завтра попробую , щас не могу . Я день промучался :) скореее всего тот код тоже работает , на удаление , просто я еще зеленый . Отпишусть здесь .
Можно еще один совсем тупой вопрос? теперь надо скопировать этот код и вставить на нажатие кнопки которая мне нужна и все , да? | |
|
| |
|
|
|
| да. Но этот кож только создает таблицу с двумя полями, И названия полей и таблицы не такие как увас. | |
|
| |
|
|
|
| Название таблицы и поля я переименую , не проблема :) но все равно не пашет , наверное из за связей или еще из за чего то . Ладно , вижу что больше справшивать уже не красиво, надо самому разбираться. Спасибо, за помощь osmor !
ПС. кстати заработало, но только тогда когда обоим переменным я задал тип данных integer.. | |
|
| |
|
|
|
| Как Вы встяляете результат в таблицу я не понял, но удаление данных из таблицы в VBA можно сделать следующим образом: Currentdb.Execute "Delete from [Имя_таблицы]"
Если эта таблица имеет связи, то ничего не должно ругаться, а просто будут удалены данные из связанных таблиц из-за целостности данных. Поэтому лучше использовать таблицу, которая не имеет связи с другими таблицами в базе.
Надеюсь мой ответ поможет Вам!!! (Если что пишите, помогу чем смогу) | |
|
| |
|
|
|
| Ага , работает ! (у меня по другому получилось, но и за ваш вариант спасибо)
Данные в таблицу я пока не заношу, а только создаю поля куда будут заносится резльтаы поиска. | |
|
| |
|
|
|
| На заметку...
Таблицу можно создать одной строчкой кода:
CurrentDB.Exequte "CREATE TABLE ИмяТаблицы (Id_Rec SHORT, ПОЛЕ TEXT(255))
Вместо CurrentDB можно использовать CurrentProject.Connection | |
|
| |
|
|
|
| спасибо ,буду учитывать это в будущем. Я расписал строчек на 10 , получается, что было не очень то и оптимально | |
|
| |
|
|
|
| >Если эта таблица имеет связи, то ничего не должно ругаться,
>а просто будут удалены данные из связанных таблиц из-за
>целостности данных.
Это если тип связи поддерживает каскадное удаление. | |
|
| |
|
|
|
| Ага, это интересное дополнение , я не знал спс ! | |
|
| |
|
|
|
| найдите ошибку кто нибудь, почему эта строчка не работает
CurrentDb.Execute "create Table [Результаты писка]([Id Rec] short, Наименование text(250),[Id Table] short(10))"
| ? | |
|
| |
|
|
|
|
| Мюллер "Ошибка синтаксиса в инструкции CREATE TABLE" вот что пишет. Short я заменил на integer[b][/b] | |
|
| |
|
|
|
| Вообще то я соврал Тип Short в аксе есть
В вашем случае
CurrentDb.Execute "create Table [Результаты писка] ([Id Rec] short, Наименование text(250),[Id Table] short )" | |
|
| |
|
|
|
| Мюллер ну так это тоже самое что я и написал выше... | |
|
| |
|
|
|
| Нет не то же самое. см. внимательней на short
CurrentDb.Execute "create Table [Результаты писка] ([Id Rec] short, Наименование text(250),[Id Table] short )" | |
|
| |
|
|
|
| short без значения (10)....в этом была загвоздка? (ну и пробельчика одного нет) | |
|
| |
|
|
|
| С ума пойти! Мюллер стал подсказывать на форуме. До этого кроме флудерадтсва в болталке толку с него не было | |
|
| |
|
|
|
| Может Мюллер и про DLookUp чо-нибудь подскажет | |
|
| |
|
|
|
| ну погадите, может Мюллер еще тут не закончил.... | |
|
| |
|
|
|
| Не. Тут Мюллер уже закончил - показал ошибку - в последнем short лишнее (10).
Или еще какой вопрос здесь остался не разрешенным? | |
|
| |
|
|
|
| вопросов больше не имею! Спасибо всем кто помогал мне | |
|
| |
|
|
|
|
| чем больше я на этом форуме, тем больше замечаю что тут самое любимое занятие у людей это ТЯПать (не в обиду сказано) | |
|
| |
|