Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.08.2011, 18:07   #11
gluk_fm
Форумчанин
 
Аватар для gluk_fm
 
Регистрация: 09.06.2011
Сообщений: 515
По умолчанию

С описания: "нужно по этим добавленным данных выполнять еще запрос и добавлять их в эту же таблицу". Я понял что можно сделать следующее:


Private Sub Кнопка16_Click()
On Error GoTo err:
DoCmd.OpenQuery "TEST"
Dim adoerr As Variant
Dim con As New ADODB.Connection
Dim z As String
Dim sql As String
Dim err As Label
con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=D:\My Documents-Konstruktor\меню.accdb;Persist Security Info=False"
con.Open
Dim rec As New ADODB.RecordSet
rec.CursorType = adOpenStatic
rec.LockType = adLockOptimistic
rec.Open "Rez", con
rec.MoveFirst

' очищаем временную таблицу (не забудьте её создать с такими полями как и Рез)
dim db as database
set db = current db
db.Execute ("delete * from [dd_t]")


Do Until rec.EOF
z = rec.Fields("1")


sql = "INSERT INTO dd_t SELECT * FROM Dok WHERE Dok.Поле5 like """ & z & """"
DoCmd.RunSQL sql
rec.MoveNext
Loop

' действия которые Вы хотите произвести с данными перед добавлением
всех данных в таблицу Rez

DoCmd.OpenTable "Rez"
Set con = Nothing
End If
err:
For Each adoerr In con.Errors
MsgBox Chr(9) & Chr(9) & Chr(9) & Chr(9) & Chr(9) & adoerr.Number & Chr(10) & Chr(10) & adoerr.Description, vbCritical
Next
End Sub

код запроса Test
Код:


SELECT * INTO Rez
FROM Dok
WHERE (((Dok.Поле5)=[Формы]![док_поиск]![Поле22].[Value]));
gluk_fm вне форума Ответить с цитированием
Старый 30.08.2011, 18:15   #12
gluk_fm
Форумчанин
 
Аватар для gluk_fm
 
Регистрация: 09.06.2011
Сообщений: 515
По умолчанию

Если таблица находится в другой базе то можно через сжатие, востановление:

tConstImp = 0
Call Compact.gflngCompactDatabase("S:\AL M\ttt_for_calcul.mdb")

nn2:
If tConstImp <> False Then GoTo nn2:

'ÔÓÍÊÖÈß ÑÆÀÒÈß ÁÄ DAO-Ìåòîäîì'
' gflngCompactDatabase(...)'
'ÂÕÎÄÍÛÅ ÏÀÐÀÌÅÒÐÛ ÔÓÍÊÖÈÈ:'
' CompactingDBPathAndName - ñòðîêîâûé ïàðàìåòð, çàäàþùèé ÏÎËÍÛÉ ÏÓÒÜ (ïóòü + èìÿ ôàéëà)'
' ê ñæèìàåìîé ÁÄ.'
' BackupBeforeCompactDB - íåîáÿçàòåëüíûé ëîãè÷åñêèé ïàðàìåòð, óêàçûâàþùèé íà'
' íåîáõîäèìîñòü ñäåëàòü ïåðåä ñæàòèåì ðåçåðâíóþ êîïèþ ñæèìàåìîé ÁÄ (ðåçåðâíàÿ'
' êîïèÿ âûêëàäûâàåòñÿ â ôàéë ñ èìåíåì "ÈìÿÑæèìàåìîãîÔàéëà_Backup"). Ïðè'
' îòñóòñòâèè ïàðàìåòðà ðåçåðâíîå êîïèðîâàíèå íå ïðîèçâîäèòñÿ.'

'ÂÎÇÂÐÀÙÀÅÌÎÅ ÔÓÍÊÖÈÅÉ ÇÍÀ×ÅÍÈÅ:'
' = 0, åñëè ñæàòèå ïðîèçâåäåíî;'
' = Íîìåðó âîçíèêøåé îøèáêè, åñëè âûïîëíèòü ñæàòèå íå óäàëîñü.'

'ÎÑÎÁÅÍÍÎÑÒÈ:'
' Äëÿ âûïîëíåíèÿ ïðîöåäóðû ñæàòèÿ àâòîìàòè÷åñêè ñîçäàåòñÿ âðåìåííûé ôàéë'
' ñ èìåíåì "ÏîëíûéÏóòü\ÈìÿÑæèìàåìîãîÔàéëà_Temp ".'
' Ðåçåðâíîå êîïèðîâàíèå, âûïîëíåíèå êîòîðîãî îïðåäåëÿåòñÿ ïàðàìåòðîì "BackupBeforeCompactDB",'
' ïðîèçâîäèòñÿ â ôàéë ñ èìåíåì "ÏîëíûéÏóòü\ÈìÿÑæèìàåìîãîÔàéëà_Back up"), ïðè'
' ýòîì ñòàðàÿ êîïèÿ ðåçåðâà ïåðåçàïèñûâàåòñÿ íîâîé (ôàêòè÷åñêè óäàëÿåòñÿ).'
'  ñëó÷àå, åñëè ñæèìàåìàÿ ÁÄ îòêðûòà, òî ôàéë ÁÄ íå áóäåò ñêîïèðîâàí (ñîîòâåòñòâóþùàÿ'
' îøèáêà ïîÿâèòñÿ â ìîìåíò êîïèðîâàíèÿ ÁÄ).'

Public Function gflngCompactDatabase( _
CompactingDBPathAndName As String, _
Optional BackupBeforeCompactDB As Boolean = False) As Long
Dim strTempFile As String

On Error GoTo ErrHandler
'Ôîðìèðóåì èìÿ äëÿ âðåìåííîãî ("ïðèíèìàþùåãî") ôàéëà'
strTempFile = Left(CompactingDBPathAndName, (Len(CompactingDBPathAndName) - 4)) & _
"_Temp" & Right(CompactingDBPathAndName, 4)
'Ñîçäàåì (åñëè íàäî) ðåçåðâíóþ êîïèþ ôàéëà ÁÄ ïåðåä ñæàòèåì'
If BackupBeforeCompactDB = True _
Then FileCopy CompactingDBPathAndName, _
Left(CompactingDBPathAndName, (Len(CompactingDBPathAndName) - 4)) & _
"_Backup" & Right(CompactingDBPathAndName, 4)
'Ñæèìàåì ôàéë ÁÄ (ñ ïåðåçàïèñüþ ñæàòîãî ôàéëà â íîâûé ôàéë)'
DBEngine.CompactDatabase CompactingDBPathAndName, strTempFile, dbLangCyrillic
'Ïåðåçàïèñûâàåì ñæàòûé (âðåìåííûé ôàéë) íà ìåñòî íåñæàòîãî (ñòàðîãî ôàéëà)'
FileCopy strTempFile, CompactingDBPathAndName
'Óäàëÿåì âðåìåííûé ôàéë'
Kill strTempFile
Exit Function
ErrHandler:
'îáðàáàòûâàåì âîçìîæíûå îøèáêè'
gflngCompactDatabase = Err.Number
Err.Clear: Exit Function
End Function
gluk_fm вне форума Ответить с цитированием
Старый 30.08.2011, 18:16   #13
gluk_fm
Форумчанин
 
Аватар для gluk_fm
 
Регистрация: 09.06.2011
Сообщений: 515
По умолчанию

Ой описание можно стереть
gluk_fm вне форума Ответить с цитированием
Старый 30.08.2011, 18:34   #14
varyat
Пользователь
 
Аватар для varyat
 
Регистрация: 23.05.2010
Сообщений: 40
По умолчанию

Большое спасибо за помощь,но ето всьоравно это не то что мне нужно, просто после того как программа добавит результаты запроса в промежуточную таблицу, я только смогу выполнить нужный мне запрос по этим данным в транзитной таблицы и перебросить их в основную, но дальше мне надо снова по этим переброшеным данным в основной таблицы делать запрос, то есть опять создавать еще одну промежуточную таблицу и так далее ....
varyat вне форума Ответить с цитированием
Старый 30.08.2011, 18:43   #15
gluk_fm
Форумчанин
 
Аватар для gluk_fm
 
Регистрация: 09.06.2011
Сообщений: 515
По умолчанию

Поправтьте меня если я правильно понял:
1. Вам надо добавить данные в таблицу (1 параметр отбора)
2. С добавленных данных ещё раз сделать запрос и задвоить необходимые данные
3. Добавить эти данные в основную таблицу
4. Обновить основную таблицу
5. С обновлённых данных основной таблицы произвести те же действия по следующему параметру
и так пока не переберёт все параметры?
gluk_fm вне форума Ответить с цитированием
Старый 30.08.2011, 18:51   #16
varyat
Пользователь
 
Аватар для varyat
 
Регистрация: 23.05.2010
Сообщений: 40
По умолчанию

Вроде да,вот как я вижу:

1.Выполнить запрос TEST
2.Получаем таблицу Rez
3.Переходим на первую запись таблицы REZ
4.Выполняем запрос на добавление в таблицу REZ
5.Переходим на следующую запись таблицы REZ
6.Выполняем пока не EOF

Проблема: Програма выполняет запрос только по даных полученых с запроса TEST,новых даных,полученых цыклом и добавленых в таблицу REZ не видить,потому получается не полный результат....
varyat вне форума Ответить с цитированием
Старый 30.08.2011, 19:04   #17
gluk_fm
Форумчанин
 
Аватар для gluk_fm
 
Регистрация: 09.06.2011
Сообщений: 515
По умолчанию

Вооооо, я ж говорил что истина где-то рядом

Тогда есть следующее решение:

Перед перебором Do Until rec.EOF вы просто добавляете данные в ещё одну таблицу (пишем рекордсет с условием свзи: REZ - REZ2=is null).

после чего пишите после loop что если (повтор рекордсета описанного выше) количество записей > 0 then go to op1

op1 ставим перед рекордсет
Не забываем что параметры нового рекордсета должны тоже добавиться в таблицу отработанных параметров.
gluk_fm вне форума Ответить с цитированием
Старый 30.08.2011, 22:43   #18
varyat
Пользователь
 
Аватар для varyat
 
Регистрация: 23.05.2010
Сообщений: 40
По умолчанию

не до конца понимаю вас,если вам не трудно можно подробнее?Буду очень благодарен.
varyat вне форума Ответить с цитированием
Старый 31.08.2011, 10:34   #19
gluk_fm
Форумчанин
 
Аватар для gluk_fm
 
Регистрация: 09.06.2011
Сообщений: 515
По умолчанию

Самый оптимальный вариант - это сократите и пробразуйте базу в 2003 формат или ниже и выложите её. А если на пальцах то должно выглядеть следующим образом:
1. Временная таблица которую Вы создадите будет хранить параметры которые уже перебрались
2. Запрос рекордсет будет смотреть выполнялась ли выборка по данным параметрам (опичывал выше по сравнению двух таблиц)
3. При первой обработке параметров они будут занесены в временную таблицу и запустив снова рекордсет для проверки есть ли ещё параметры для перебора, Вы запустите так сказать "бесконечный цикл" (тоесть он закончится но только тогда как закончатся параметры для перебора)

Принцип как вода подымается по спирали сначала идёт наростание (количество параметров увеличивается с добавлением записей а потом постепенно снижается, когда большинство параметров уже будут обработаны)
gluk_fm вне форума Ответить с цитированием
Старый 31.08.2011, 17:29   #20
varyat
Пользователь
 
Аватар для varyat
 
Регистрация: 23.05.2010
Сообщений: 40
По умолчанию

И все же если можете,покажыте на примере кода,я на словах никак не могу опредилить куда и что,буду очень благодарен вам......
varyat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод результатов sql-запроса в textbox r00tready Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 3 04.12.2010 19:58
не работает запрос на обновление для запроса на быборку ww01031977 Microsoft Office Access 1 04.05.2010 18:08
Анализ результатов Foxtrot_1 Помощь студентам 0 04.10.2009 18:49
Обновление запроса Sergius X SQL, базы данных 2 01.06.2009 21:45
Сохранение результатов program123 Общие вопросы Delphi 1 13.03.2009 22:10