|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
30.08.2011, 18:07 | #11 |
Форумчанин
Регистрация: 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])); |
30.08.2011, 18:15 | #12 |
Форумчанин
Регистрация: 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 |
30.08.2011, 18:16 | #13 |
Форумчанин
Регистрация: 09.06.2011
Сообщений: 515
|
Ой описание можно стереть
|
30.08.2011, 18:34 | #14 |
Пользователь
Регистрация: 23.05.2010
Сообщений: 40
|
Большое спасибо за помощь,но ето всьоравно это не то что мне нужно, просто после того как программа добавит результаты запроса в промежуточную таблицу, я только смогу выполнить нужный мне запрос по этим данным в транзитной таблицы и перебросить их в основную, но дальше мне надо снова по этим переброшеным данным в основной таблицы делать запрос, то есть опять создавать еще одну промежуточную таблицу и так далее ....
|
30.08.2011, 18:43 | #15 |
Форумчанин
Регистрация: 09.06.2011
Сообщений: 515
|
Поправтьте меня если я правильно понял:
1. Вам надо добавить данные в таблицу (1 параметр отбора) 2. С добавленных данных ещё раз сделать запрос и задвоить необходимые данные 3. Добавить эти данные в основную таблицу 4. Обновить основную таблицу 5. С обновлённых данных основной таблицы произвести те же действия по следующему параметру и так пока не переберёт все параметры? |
30.08.2011, 18:51 | #16 |
Пользователь
Регистрация: 23.05.2010
Сообщений: 40
|
Вроде да,вот как я вижу:
1.Выполнить запрос TEST 2.Получаем таблицу Rez 3.Переходим на первую запись таблицы REZ 4.Выполняем запрос на добавление в таблицу REZ 5.Переходим на следующую запись таблицы REZ 6.Выполняем пока не EOF Проблема: Програма выполняет запрос только по даных полученых с запроса TEST,новых даных,полученых цыклом и добавленых в таблицу REZ не видить,потому получается не полный результат.... |
30.08.2011, 19:04 | #17 |
Форумчанин
Регистрация: 09.06.2011
Сообщений: 515
|
Вооооо, я ж говорил что истина где-то рядом
Тогда есть следующее решение: Перед перебором Do Until rec.EOF вы просто добавляете данные в ещё одну таблицу (пишем рекордсет с условием свзи: REZ - REZ2=is null). после чего пишите после loop что если (повтор рекордсета описанного выше) количество записей > 0 then go to op1 op1 ставим перед рекордсет Не забываем что параметры нового рекордсета должны тоже добавиться в таблицу отработанных параметров. |
30.08.2011, 22:43 | #18 |
Пользователь
Регистрация: 23.05.2010
Сообщений: 40
|
не до конца понимаю вас,если вам не трудно можно подробнее?Буду очень благодарен.
|
31.08.2011, 10:34 | #19 |
Форумчанин
Регистрация: 09.06.2011
Сообщений: 515
|
Самый оптимальный вариант - это сократите и пробразуйте базу в 2003 формат или ниже и выложите её. А если на пальцах то должно выглядеть следующим образом:
1. Временная таблица которую Вы создадите будет хранить параметры которые уже перебрались 2. Запрос рекордсет будет смотреть выполнялась ли выборка по данным параметрам (опичывал выше по сравнению двух таблиц) 3. При первой обработке параметров они будут занесены в временную таблицу и запустив снова рекордсет для проверки есть ли ещё параметры для перебора, Вы запустите так сказать "бесконечный цикл" (тоесть он закончится но только тогда как закончатся параметры для перебора) Принцип как вода подымается по спирали сначала идёт наростание (количество параметров увеличивается с добавлением записей а потом постепенно снижается, когда большинство параметров уже будут обработаны) |
31.08.2011, 17:29 | #20 |
Пользователь
Регистрация: 23.05.2010
Сообщений: 40
|
И все же если можете,покажыте на примере кода,я на словах никак не могу опредилить куда и что,буду очень благодарен вам......
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вывод результатов 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 |