powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Объсните, пожалуйста... :)
23 сообщений из 23, страница 1 из 1
Объсните, пожалуйста... :)
    #32210339
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно ли в VBA создать запрос, который добавит записи в "таблицу 1" на основе выборки из "таблицы 2"?
желательно коротенький примерчик
Спасибо...
...
Рейтинг: 0 / 0
Объсните, пожалуйста... :)
    #32210341
VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
Insert into table1(fld1,fld2,fld3) select fld1,fld2,fld3 from table2
...
Рейтинг: 0 / 0
Объсните, пожалуйста... :)
    #32210349
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это-то я знаю :)
Я никак не пойму, каким образом это реализовать через VBA??? Help pls
...
Рейтинг: 0 / 0
Объсните, пожалуйста... :)
    #32210371
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проявите активность pls :)
...
Рейтинг: 0 / 0
Объсните, пожалуйста... :)
    #32210376
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предлагаю на обсуждение тупой способ:

Dim r1 As DAO.Recordset
Dim r2 As DAO.Recordset
Dim z As String

Set r1 = CurrentDb.OpenRecordset("cash_rest")
Set r2 = CurrentDb.OpenRecordset("SELECT sum(приход) as x, sum(расход) as y FROM cash WHERE(((cash.валюта) = '" & r1("currency") & "'))")
r1.Edit

z = r2("x") - r2("y")
r1("rest") = z
r1.Update
r1.close
r2.close

Интересуюсь конструктивной критикой :)
Этот способ не полностью отвечает поставленной задаче, т.к. возврщает значение только для первой строки в таблице. А вот как заполнить все?!
...
Рейтинг: 0 / 0
Объсните, пожалуйста... :)
    #32210504
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выше был хороший пример использования SQL
вместо ВБА-шного переноса записей ручками.
Применение его такое:
strMySQLString="SELECT * FROM ...." 'здесь текст SQL, такой же, как SQL в сохраненных запросах базы
docmd.RunSQL strMySQLString ' а вот и выполнение запроса
...
Рейтинг: 0 / 0
Объсните, пожалуйста... :)
    #32210509
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Vsevolod V:
ну если принципиально на ВБА, то вот:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
set rsFrom=currentdb.openrecordset( "Tab2" )
set rsTo=currentdb.openrecordset( "Tab1" )
while not rsFrom.eof
 rsTo.AddNew
 rsTo![f1]=rsFrom![fl1]
...
 rsTo![fN]=rsFrom![flN]
 rsTo.Update
 rsFrom.MoveNext
wend
...
Рейтинг: 0 / 0
Объсните, пожалуйста... :)
    #32210516
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо огромное!!!
...
Рейтинг: 0 / 0
Объсните, пожалуйста... :)
    #32210529
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А по VIG-у все-таки проще, мне так кажется.

Код: plaintext
CurrentDB.Execute  "Insert into table1(fld1,fld2,fld3) select fld1,fld2,fld3 from table2" 
...
Рейтинг: 0 / 0
Объсните, пожалуйста... :)
    #32210530
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да вы что, какие нафиг рекордсеты при выполнении обычного запроса??
Нафига?? Т.е. если вам надо добавить 1000000 записей куда-либо вы это делаете через рекордсет? Флаг в руки и барабан на шею:)

Код: plaintext
1.
Docmd.runsql  "INSERT INTO Table1 ( fld1, fld2, fld3 )
SELECT Table2.fld1, Table2.fld2, Table2.fld3 FROM Table2" 


Можно не через Docmd, а через Execute действовать, но уж никак не через рекордсеты. Это ещё простой вариант, а если у вас сложный запрос на основании нескольких таблиц?
...
Рейтинг: 0 / 0
Объсните, пожалуйста... :)
    #32210534
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проще-то оно проще, но Vsevolod V видимо спросил про принцип,
задачка-то наверное посложнее будет.
я надеюсь.
...
Рейтинг: 0 / 0
Объсните, пожалуйста... :)
    #32210811
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа! Как это не прискорбно, но задачка действительно не так проста. Объясню подробно.
Существует таблица Cash_rest ("Остаток кассы") (поля: Currency (валюта), Rest (остаток)), заполняется на основе запроса с параметром DISTINCT из таблицы касса (cash) (используемые поля: Валюта, Приход, Расход).
Задача в том, что необходимо сосчитать остаток кассы (Приход - Расход) по каждой валюте из таблицы cash_rest
Вот, что уже сделано:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Dim r1 As DAO.Recordset
Dim r2 As DAO.Recordset

Dim z As String
Set r1 = CurrentDb.OpenRecordset( "cash_rest" )

Set r2 = CurrentDb.OpenRecordset( "SELECT sum(приход) as x, sum(расход) as y FROM cash WHERE(((cash.валюта) = '" & r1("currency") & "'))" )
r1.MoveFirst
While Not r1.EOF
     
     r1.Edit
     r1( "rest" ) = r2( "x" ) - r2( "y" )
     r1.Update
     r1.MoveNext
     
Wend
  r1.close
   r2.close



Код работает на 30%: он находит значение остатка только по первой валюте из таблицы Cash_rest и заполняет этим значением все поле Rest, начиная с последней записи!!!
Тут что-то не то :)
Help pls!!!
...
Рейтинг: 0 / 0
Объсните, пожалуйста... :)
    #32210813
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант Insert Into не подходит так как нужно изменять уже существую щие стьроки, а с UPDATE я как-то не пойму че делать :)
...
Рейтинг: 0 / 0
Объсните, пожалуйста... :)
    #32210828
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
немножко подкорректирую:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Dim r1 As DAO.Recordset
Dim r2 As DAO.Recordset

Dim z As String
Set r1 = CurrentDb.OpenRecordset( "cash_rest" )
While Not r1.EOF
  Set r2 = CurrentDb.OpenRecordset( "SELECT sum(приход) as x, sum(расход) as y
   FROM cash WHERE(((cash.валюта) = '" & r1("currency") & "'))" )
     r1.Edit
     r1( "rest" ) = r2( "x" ) - r2( "y" )
     r1.Update
     r1.MoveNext
  r2.close
Wend
  r1.close
...
Рейтинг: 0 / 0
Объсните, пожалуйста... :)
    #32210834
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
УРА!!! Работает :)) СПАСИБО!
...
Рейтинг: 0 / 0
Объсните, пожалуйста... :)
    #32210838
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Типа оригинальный выход :))
...
Рейтинг: 0 / 0
Объсните, пожалуйста... :)
    #32210906
VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Vsevolod V
Зачем тебе держать отдельную таблицу cash_rest,когда элементарный запрос
Код: plaintext
1.
2.
3.
Select [валюта],sum([Приход]) as Приход,sum([Расход]) as Расход,
sum([Приход])-sum([Расход])  as Остаток
from cash
group by [валюта]

дает тебе то ,что надо.
...
Рейтинг: 0 / 0
Объсните, пожалуйста... :)
    #32210981
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Псевдоним Приход привел к возникновению циклической ссылки. Типа неувязочка :)
...
Рейтинг: 0 / 0
Объсните, пожалуйста... :)
    #32210999
VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Типа ... поменяй псевдоним на Уход
...
Рейтинг: 0 / 0
Объсните, пожалуйста... :)
    #32211004
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Select [валюта],sum([Приход]) as Приход ик ,sum([Расход]) as Расход,
sum([Приход])-sum([Расход]) as Остаток
from cash
group by [валюта]

:)
...
Рейтинг: 0 / 0
Объсните, пожалуйста... :)
    #32211008
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я ступил :)) Я так делал, только еще и в Sum(...) тоже Приходик вставил :)
Спасибо
...
Рейтинг: 0 / 0
Объсните, пожалуйста... :)
    #32211019
VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А еще лучше
Код: plaintext
1.
2.
3.
Select [валюта],sum([Приход]) as Тюрьма ,sum([Расход]) as Расход, 
sum([Приход])-sum([Расход]) as Остаток 
from cash 
group by [валюта] 
...
Рейтинг: 0 / 0
Объсните, пожалуйста... :)
    #32211032
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда уж и Расход надо переименовать - там таже ошибка :))
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Объсните, пожалуйста... :)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]