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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.09.2012, 14:54   #1
ola_ya_22
Новичок
Джуниор
 
Регистрация: 03.09.2012
Сообщений: 7
По умолчанию как вставить данные из таблицы access в форму?

скажите пожалуйста как вставить данные из таблицы access в форму?
есть форма, которая содержит поля(дата, название товара, страна_производитель, базис поставки,период поставки(6 пар полей)-период к примеру с 1 сентября 2012 по 1 октября 2012 и таких еще 2 пары периодов и соответствующая каждому периоду цена - стоимость eur).остальные поля общие.
и вот нужно при введении даты в форме сразу проверять есть такая дата уже в таблице, если есть и название товара совпадает, то автоматом в форму вставлять имеющиеся данные из таблицы и поле стоимость eur должно быть доступно для редактирования. пользователь может поменять стоимоть и при нажатии некой кнопки должен задаваться вопрос с подтверждением-обновить цены и при нажатии да, стоимоть должна обновляться в таблице.
если такой даты в таблице нет, то выполнять нижеописанный код
можно как-то модифицировать этот код, который добавляет данные в таблицу?
Private Sub Добавить_Click()
Set rs = New ADODB.Recordset
Set cnn = CurrentProject.Connection

c = Me.[ПолеСоСписком41]
s = Me.[ПолеСоСписком39]

rs.Open "SELECT * FROM [европа_масла_1]", cnn, adOpenKeyset, adLockOptimistic

If Format(s, "yyyymmdd") <= Format(c, "yyyymmdd") And Me.[Поле25] <> Empty Then

Do While Format(s, "yyyymmdd") <= Format(c, "yyyymmdd")
rs.AddNew
rs![Название_товара] = Me.[Поле37]
rs![Дата] = Format(Me.[Поле3], "yyyymmdd")
rs![страна_производитель] = Me.[ПолеСоСписком5]
rs![базис_поставки] = Me.[ПолеСоСписком7]
rs![Стоимость_EUR] = Me.[Поле25]
rs![Период_поставки] = Format(s, "mmmyyyy")
s = DateAdd("m", 1, s)
rs.Update
Loop
Else: MsgBox "Проверьте корректность введения периода поставки и цены USD"
End If

c = Me.[ПолеСоСписком45]
s = Me.[ПолеСоСписком43]


If Format(s, "yyyymmdd") <= Format(c, "yyyymmdd") And Me.[Поле49] <> Empty Then
Do While Format(s, "yyyymmdd") <= Format(c, "yyyymmdd")
rs.AddNew
rs![Название_товара] = Me.[Поле37]
rs![Дата] = Format(Me.[Поле3], "yyyymmdd")
rs![страна_производитель] = Me.[ПолеСоСписком5]
rs![базис_поставки] = Me.[ПолеСоСписком7]
rs![Стоимость_EUR] = Me.[Поле49]
rs![Период_поставки] = Format(s, "mmmyyyy")
s = DateAdd("m", 1, s)
rs.Update
Loop
Else: MsgBox "Проверьте корректность введения периода поставки и цены USD"
End If

c = Me.[ПолеСоСписком48]
s = Me.[ПолеСоСписком46]


If Format(s, "yyyymmdd") <= Format(c, "yyyymmdd") And Me.[Поле50] <> Empty Then
Do While Format(s, "yyyymmdd") <= Format(c, "yyyymmdd")
rs.AddNew
rs![Название_товара] = Me.[Поле37]
rs![Дата] = Format(Me.[Поле3], "yyyymmdd")
rs![страна_производитель] = Me.[ПолеСоСписком5]
rs![базис_поставки] = Me.[ПолеСоСписком7]
rs![Стоимость_EUR] = Me.[Поле50]
rs![Период_поставки] = Format(s, "mmmyyyy")
s = DateAdd("m", 1, s)
rs.Update
Loop
Else: MsgBox "Проверьте корректность введения периода поставки и цены USD"
End If
rs.Close

With CurrentProject.Connection
'
strSQL = _
"Update [европа_масла_1] " & _
"set спот='спот' " & _
"from " & _
"(select top 1 * from [европа_масла_1] " & _
"where [европа_масла_1].[дата] = '" & Format(Me.[Поле3], "yyyymmdd") & _
"' And [европа_масла_1].[базис_поставки] = '" & Me.[ПолеСоСписком7] & _
"' And [европа_масла_1].[Страна_производитель] = '" & Me.[ПолеСоСписком5] & "'" & _
"order by [европа_масла_1].[дата] desc,[период_поставки]) as t " & _
" where t.[дата]=[европа_масла_1].[дата] " & _
" and t.[период_поставки]=[европа_масла_1].[период_поставки] " & _
" and t.[страна_производитель]=[европа_масла_1].[страна_производитель] " & _
" and t.[базис_поставки]=[европа_масла_1].[базис_поставки] "

Debug.Print strSQL
.Execute strSQL

End With

End Sub
ola_ya_22 вне форума Ответить с цитированием
Старый 03.09.2012, 15:42   #2
gluk_fm
Форумчанин
 
Аватар для gluk_fm
 
Регистрация: 09.06.2011
Сообщений: 515
По умолчанию

Добрый день.
В чём проблема повесить Ваши вышеописанные действия на процедуру обновления даты?
gluk_fm вне форума Ответить с цитированием
Старый 03.09.2012, 15:51   #3
ola_ya_22
Новичок
Джуниор
 
Регистрация: 03.09.2012
Сообщений: 7
По умолчанию

я не представляю как это должно выглядеть на языке vba?
как сравнивать поле из формы с полями таблицы?
как вставлять нужные данные в нужные поля?
ola_ya_22 вне форума Ответить с цитированием
Старый 03.09.2012, 16:04   #4
ola_ya_22
Новичок
Джуниор
 
Регистрация: 03.09.2012
Сообщений: 7
По умолчанию

Цитата:
Сообщение от gluk_fm Посмотреть сообщение
Добрый день.
В чём проблема повесить Ваши вышеописанные действия на процедуру обновления даты?

ввожу в форму дату к примеру 03.09.2012
жму кнопку проверить дату
как при нажатии сделать так чтобы
if Me.[Поле3] =any (select [Дата] from [европа_масла_1]) then
me.[полесосписком5]=[европа_масла_1].[Страна_производитель]
не подскажете как это на vba будет?
и с одной ценой-один период
записать крайнее значение в [полесосписком39] а другое крайнее в [полесосписком41]
их стоимость в поле25
и все это на 1 дату
ola_ya_22 вне форума Ответить с цитированием
Старый 03.09.2012, 22:24   #5
Myhaylo
Форумчанин
 
Регистрация: 19.07.2012
Сообщений: 520
По умолчанию

Для доступа к данным таблицы используются:
а) объект RecordSet;
б) функции DFirst, DLoockUp, DCount, DSum и т. д.
Окупант, руки прочь от Украины!!! Слава Героям!
Myhaylo вне форума Ответить с цитированием
Старый 04.09.2012, 01:29   #6
Андрэич
Форумчанин
 
Аватар для Андрэич
 
Регистрация: 20.05.2012
Сообщений: 311
По умолчанию

2Myhaylo
Там нет объяснительных шансов. К сожалению
Андрэич вне форума Ответить с цитированием
Старый 04.09.2012, 08:01   #7
ola_ya_22
Новичок
Джуниор
 
Регистрация: 03.09.2012
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Андрэич Посмотреть сообщение
2Myhaylo
Там нет объяснительных шансов. К сожалению
это вы о чем?
ola_ya_22 вне форума Ответить с цитированием
Старый 04.09.2012, 10:49   #8
ola_ya_22
Новичок
Джуниор
 
Регистрация: 03.09.2012
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Myhaylo Посмотреть сообщение
Для доступа к данным таблицы используются:
а) объект RecordSet;
б) функции DFirst, DLoockUp, DCount, DSum и т. д.
для общих полей понятно

Set rs = New ADODB.Recordset
Set cnn = CurrentProject.Connection
rs.Open "SELECT * FROM [европа_масла_1] where [европа_масла_1].[дата] = '" & Format(Me.[Поле3], "yyyymmdd") & "'", cnn, adOpenKeyset, adLockOptimistic
Me.[полесосписком5] = rs![страна_производитель]
Me.[полесосписком7] = rs![базис_поставки]

а вот как быть с периодом:
дата страна_производитель базис поставки период поставки стоимость
03.09.2012 китай fob 01.09.2012 950
03.09.2012 китай fob 01.10.2012 950
в форму должно выводиться 01.09.2012 01.10.2012 950
период должен объединяться в один период пока стоимоть одинаковая
крайние значения периоды должны записываться в [полесосписком39] и [полесосписком41] ценна в поле25
потом собираться другой период и записываться в [полесосписком42] и [полесосписком43] ценна в поле26
и 3-й период в [полесосписком44] и [полесосписком45] ценна в поле27
ola_ya_22 вне форума Ответить с цитированием
Старый 04.09.2012, 14:32   #9
gluk_fm
Форумчанин
 
Аватар для gluk_fm
 
Регистрация: 09.06.2011
Сообщений: 515
По умолчанию

Добрый день.
Для обработки Вашим же методом можно сделать так:
Код:


if Me.[дата 1] <= rs![дата 1] and Me.[дата 2] <= rs![дата 2] then

Что Вам необходимо сделать
Me.[полесосписком39].value = rs![дата 1]'или что там Вам необходимо подставить

end if
Только обязательно обратите внимание на формат дат, так как SQL воспринимает их mm/dd/yyyy и всё зависит только от формата полей который Вы сравниваете.

Последний раз редактировалось gluk_fm; 04.09.2012 в 14:34.
gluk_fm вне форума Ответить с цитированием
Старый 04.09.2012, 15:00   #10
ola_ya_22
Новичок
Джуниор
 
Регистрация: 03.09.2012
Сообщений: 7
По умолчанию

Set rs = New ADODB.Recordset
Set cnn = CurrentProject.Connection
rs.Open "SELECT * FROM [европа_масла_1] where [европа_масла_1].[дата] = '" & Format(Me.[Поле3], "yyyymmdd") & "'", cnn, adOpenKeyset, adLockOptimistic
Me.[полесосписком5] = rs![страна_производитель]
Me.[полесосписком7] = rs![базис_поставки]
x = rs![стоимость_eur]
Me.[полесосписком39] = rs![период_поставки]
Do While not rs.EOF And rs![стоимость_eur] = x
Me.[полесосписком41] = rs![период_поставки]
rs.MoveNext
Loop
Me.[поле25] = rs![стоимость_eur]
rs.Update

x = rs![стоимость_eur]
Me.[полесосписком43] = rs![период_поставки]
Do While not rs.EOF And rs![стоимость_eur] = x
Me.[полесосписком45] = rs![период_поставки]
rs.MoveNext
Loop
Me.[поле49] = rs![стоимость_eur]
rs.Update

x = rs![стоимость_eur]
Me.[полесосписком46] = rs![период_поставки]
Do While not rs.EOF And rs![стоимость_eur] = x
Me.[полесосписком48] = rs![период_поставки]
rs.MoveNext
Loop
Me.[поле50] = rs![стоимость_eur]
rs.Update

как-то так....только поле50 последнее не обновляется....говорит конец достигнут...как быть?
ola_ya_22 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вставить данные в access через c++ romamoma C/C++ Базы данных 2 19.04.2012 17:23
можно ли открыть форму access в delphi...таблицы подключаются....а форму можно подключить?? Анна1217 Помощь студентам 3 06.04.2012 07:56
Как скопировать данные таблицы из одной базы access в другую? AK BULLETS БД в Delphi 2 31.03.2010 13:09
как связать таблицы в access, чтобы данные автоматически копировались? rudess Microsoft Office Access 1 15.08.2009 16:22
как оператором insert вставить данные сразу в две таблицы? furstenberg БД в Delphi 2 18.10.2007 16:39