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

Форум: MS ACCESS

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

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

 
 

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

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

тема: Очистка таблицы
 
 автор: SergeyKV   (13.11.2008 в 09:21)   личное сообщение
2 Кб.
 
 

Доброе день! у меня такой вопрос. Мне нужно сделать поиск по БД и что бы после окончания формировалась временная таблица SearchResults с результатами поиска(таблица уже создана заранее , просто она заполняется результами). При новом поиске надо что бы эта таблица очищалась. И вот вопрос как можно очищать таблицу от результатов на vba?
Если что то таблица содержить три поля , это идентификатор строки и столбца(тк поиск ведется по нескольким базам и чтобы потом узнать откуда что берется) и поле с названием организации.

в прикрепленном файле таблица . Код не прикрепляю тк он у меня не работает. И в общем стыдно его даже и прикреплять тк я понимаю что он не правилен в корне

  Ответить  
 
 автор: Дрюня   (13.11.2008 в 09:30)   личное сообщение
 
 

"delete * from tbl ..."
однако, если в БД установлены связи, то может и ругнуться

  Ответить  
 
 автор: SergeyKV   (13.11.2008 в 09:54)   личное сообщение
 
 

а надо предварительно объялять переменные ? tbl - название таблицы?

  Ответить  
 
 автор: Alex   (13.11.2008 в 09:45)   личное сообщение
 
 

Может это поможет

Справочник разработчика 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

  Ответить  
 
 автор: SergeyKV   (13.11.2008 в 10:06)   личное сообщение
 
 

а где можно скачать справочник программиста или хотя бы полное название я поищу.. А пример чего то не пашет , ругается что объявленная процедура не соответствует описанию события или имеет похожее название

  Ответить  
 
 автор: osmor   (13.11.2008 в 10:10)   личное сообщение
 
 

http://hiprog.com/index.php?option=com_content&task=view&id=729

  Ответить  
 
 автор: SergeyKV   (13.11.2008 в 12:03)   личное сообщение
 
 

понятно разобраться бы еще с этой процедурой

  Ответить  
 
 автор: osmor   (13.11.2008 в 16:56)   личное сообщение
 
 

она должна работать.
Где Вы ее используете? как вызываете?

  Ответить  
 
 автор: SergeyKV   (13.11.2008 в 17:21)   личное сообщение
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


упс... не знаю что с этой кодировкой

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

Вот рабочий код
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 


Почему не работает удаление не понятно - код совершенно рабочий

  Ответить  
 
 автор: SergeyKV   (13.11.2008 в 21:28)   личное сообщение
 
 

завтра попробую , щас не могу . Я день промучался :) скореее всего тот код тоже работает , на удаление , просто я еще зеленый . Отпишусть здесь .

Можно еще один совсем тупой вопрос? теперь надо скопировать этот код и вставить на нажатие кнопки которая мне нужна и все , да?

  Ответить  
 
 автор: osmor   (14.11.2008 в 09:37)   личное сообщение
 
 

да. Но этот кож только создает таблицу с двумя полями, И названия полей и таблицы не такие как увас.

  Ответить  
 
 автор: SergeyKV   (14.11.2008 в 09:55)   личное сообщение
 
 

Название таблицы и поля я переименую , не проблема :) но все равно не пашет , наверное из за связей или еще из за чего то . Ладно , вижу что больше справшивать уже не красиво, надо самому разбираться. Спасибо, за помощь osmor !
ПС. кстати заработало, но только тогда когда обоим переменным я задал тип данных integer..

  Ответить  
 
 автор: Canek   (14.11.2008 в 10:40)   личное сообщение
 
 

Как Вы встяляете результат в таблицу я не понял, но удаление данных из таблицы в VBA можно сделать следующим образом: Currentdb.Execute "Delete from [Имя_таблицы]"
Если эта таблица имеет связи, то ничего не должно ругаться, а просто будут удалены данные из связанных таблиц из-за целостности данных. Поэтому лучше использовать таблицу, которая не имеет связи с другими таблицами в базе.
Надеюсь мой ответ поможет Вам!!! (Если что пишите, помогу чем смогу)

  Ответить  
 
 автор: SergeyKV   (14.11.2008 в 11:21)   личное сообщение
 
 

Ага , работает ! (у меня по другому получилось, но и за ваш вариант спасибо)
Данные в таблицу я пока не заношу, а только создаю поля куда будут заносится резльтаы поиска.

  Ответить  
 
 автор: Анатолий (Киев)   (14.11.2008 в 13:01)   личное сообщение
 
 

На заметку...
Таблицу можно создать одной строчкой кода:
CurrentDB.Exequte "CREATE TABLE ИмяТаблицы (Id_Rec SHORT, ПОЛЕ TEXT(255))

Вместо CurrentDB можно использовать CurrentProject.Connection

  Ответить  
 
 автор: SergeyKV   (14.11.2008 в 14:00)   личное сообщение
 
 

спасибо ,буду учитывать это в будущем. Я расписал строчек на 10 , получается, что было не очень то и оптимально

  Ответить  
 
 автор: Denis V.   (14.11.2008 в 13:58)   личное сообщение
 
 

>Если эта таблица имеет связи, то ничего не должно ругаться,
>а просто будут удалены данные из связанных таблиц из-за
>целостности данных.
Это если тип связи поддерживает каскадное удаление.

  Ответить  
 
 автор: SergeyKV   (14.11.2008 в 14:03)   личное сообщение
 
 

Ага, это интересное дополнение , я не знал спс !

  Ответить  
 
 автор: SergeyKV   (18.11.2008 в 14:06)   личное сообщение
 
 

найдите ошибку кто нибудь, почему эта строчка не работает
CurrentDb.Execute "create Table  [Результаты писка]([Id Rec] short, Наименование text(250),[Id Table] short(10))"

?

  Ответить  
 
 автор: Мюллер   (18.11.2008 в 14:13)   личное сообщение
 
 

Типа Short в аксе нет

  Ответить  
 
 автор: SergeyKV   (18.11.2008 в 14:22)   личное сообщение
 
 

Мюллер "Ошибка синтаксиса в инструкции CREATE TABLE" вот что пишет. Short я заменил на integer[b][/b]

  Ответить  
 
 автор: Мюллер   (18.11.2008 в 14:37)   личное сообщение
 
 

Вообще то я соврал Тип Short в аксе есть
В вашем случае
CurrentDb.Execute "create Table [Результаты писка] ([Id Rec] short, Наименование text(250),[Id Table] short )"

  Ответить  
 
 автор: SergeyKV   (18.11.2008 в 14:53)   личное сообщение
 
 

Мюллер ну так это тоже самое что я и написал выше...

  Ответить  
 
 автор: Мюллер   (18.11.2008 в 15:01)   личное сообщение
 
 

Нет не то же самое. см. внимательней на short

CurrentDb.Execute "create Table [Результаты писка] ([Id Rec] short, Наименование text(250),[Id Table] short )"

  Ответить  
 
 автор: SergeyKV   (18.11.2008 в 15:16)   личное сообщение
 
 

short без значения (10)....в этом была загвоздка? (ну и пробельчика одного нет)

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

С ума пойти! Мюллер стал подсказывать на форуме. До этого кроме флудерадтсва в болталке толку с него не было

  Ответить  
 
 автор: Pasat   (18.11.2008 в 15:33)   личное сообщение
 
 

Может Мюллер и про DLookUp чо-нибудь подскажет

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

ну погадите, может Мюллер еще тут не закончил....

  Ответить  
 
 автор: FORMAT   (18.11.2008 в 16:00)   личное сообщение
 
 

Не. Тут Мюллер уже закончил - показал ошибку - в последнем short лишнее (10).
Или еще какой вопрос здесь остался не разрешенным?

  Ответить  
 
 автор: SergeyKV   (18.11.2008 в 16:57)   личное сообщение
 
 

вопросов больше не имею! Спасибо всем кто помогал мне

  Ответить  
 
 автор: Мюллер   (19.11.2008 в 16:32)   личное сообщение
 
 

Сам дурак - это я FORMATу в ответ на зачисление меня в главные флудерасты форума
Лучше пошли тяпнем. ТЯП!!!

  Ответить  
 
 автор: SergeyKV   (19.11.2008 в 16:41)   личное сообщение
 
 

чем больше я на этом форуме, тем больше замечаю что тут самое любимое занятие у людей это ТЯПать (не в обиду сказано)

  Ответить  
 
 автор: Мюллер   (19.11.2008 в 16:47)   личное сообщение
 
 

Ага. Особенно у двух главных алконавтов - у FORMATa и Мюллера
Ну, за алконавтов (с)
ТЯП!!!

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