powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Данные из Формуляра для Опроса в проекте (.adp)
16 сообщений из 16, страница 1 из 1
Данные из Формуляра для Опроса в проекте (.adp)
    #32650762
magoga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В моей старой базе данных (.mdb) был опрос, который использовал параметр из текушей Формы:
[quote]
SELECT DISTINCT a.SubAsset
FROM Container AS a LEFT JOIN Container AS b ON a.SubAsset=b.MainAsset
WHERE a.MainAsset=[Forms].[Assets].[Asset #]
UNION SELECT DISTINCT b.SubAsset
FROM Container AS a LEFT JOIN Container AS b ON a.SubAsset=b.MainAsset
WHERE a.MainAsset=[Forms].[Assets].[Asset #];
[/quote]

Сейчас создаю аналогичную базу для SQL Servera в проекте (.adp) и обнаружил, что SQL Server не поддерживает команду UNION. Ну ладно, попробую как нибудь заменить её. А вот параметр из формуляра a.MainAsset=[Forms].[Assets].[Asset #] мой опрос почему-то не читает.
Кто подскажет как мне использоват в WHERE данные TeхtBoхa из Формуляра.
...
Рейтинг: 0 / 0
Данные из Формуляра для Опроса в проекте (.adp)
    #32650856
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
обнаружил, что SQL Server не поддерживает команду UNION.

ДОКТОРА - СКОРЕЕ

автор
мой опрос почему-то не читает

итить - может запрос т.е. хранимая процедура ?
поищи по конфе - Latuk цать раз обьяснял как параметр передать.
...
Рейтинг: 0 / 0
Данные из Формуляра для Опроса в проекте (.adp)
    #32651066
magoga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то не нашёл эту тему на форуме. Может кто подскажет как считать правильно параметр?
...
Рейтинг: 0 / 0
Данные из Формуляра для Опроса в проекте (.adp)
    #32651146
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сервер ничего не знает ни о каком из объектов VBA клиента
А значит у табе два пути
1)либо динамически по какому либо событию (например после обновления TeхtBoхa)
динамически сгенерить строку запроса
в которой заменить [Forms].[Assets].[Asset #] на конкретное число
при этом не забыть если это дробное или дата/время привести к виду понятному серверу
2)либо создать на сервере ХП-ку которой передать значение контрола в качестве параметра
Механизм передачи параметра может быть разным
все зависит от того какому именно контролу источник и в каких обстаятельствах

PS в применении DISTINCT не необходимости
если UNION без ALL
...
Рейтинг: 0 / 0
Данные из Формуляра для Опроса в проекте (.adp)
    #32651347
magoga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал в процедуре Current задеркларировать переменную Asset_Nr, которая считывается с TextBox "Asset" формы "Assets1":
[quote]
Dim Asset_Nr As Integer
Asset_Nr = Me.AssetNr
[/quote]
Потом попробовал внести эту переменную в пробный запрос:

[quote]
SELECT SubAsset
FROM dbo.Container a
WHERE (MainAsset = & Str(Asset_Nr))
[/quote]

сообщает, что конвертация типа данных не правильна. Пробовал ещё кучу вариантов и ни фига. Подкажите мне наглядней плиз.
...
Рейтинг: 0 / 0
Данные из Формуляра для Опроса в проекте (.adp)
    #32651349
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Latuk - написал бы FAQ - после замены DAO--->ADO самый топовый вопрос!
...
Рейтинг: 0 / 0
Данные из Формуляра для Опроса в проекте (.adp)
    #32652794
magoga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как правильно задекларировать переменную, которая будет использоваться в запросе?
Я сделал событие для ТекстБокса, откуда мне требуется параметр:

Private Sub AssetNr_AfterUpdate()
Dim Asset_Nr As String
Asset_Nr = Str(Me.AssetNr)
End Sub


Потом не знаю как использовать переменную Asset_Nr в запросе:


SELECT SubAsset
FROM dbo.Container a
WHERE (MainAsset = ?????)


Пробовал просто вставлять на место вопороситьных знаков и по другому, но постоянно получаю сообщение:

Syntax error converting varchar 'Asset_Nr' to a column of datatype int
...
Рейтинг: 0 / 0
Данные из Формуляра для Опроса в проекте (.adp)
    #32652904
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://hiprog.com/access/article.asp?id=370
Ты должен собрать строку запроса
в которой значение Me.AssetNr должно быть вписанно в виде константы
причем если это строковая константа то она должна быть заключена в апострофы
из ошибки видно что строка содержащаяся в текстбоксе не можнт быть переведена в инт скорее всего она пустая
эту ситуацию надо обработать например так

SQLStr="SELECT SubAsset FROM dbo.Container " & iif(IsNull(Me.AssetNr),"","WHERE MainAsset = " & Me.AssetNr)
MyCombo.RowSourse = SQLStr

еще можно обработать случай ввода нечислового или не целого значения

в результате выполнения RowSourse поля со списком должно содержать что-то типа
SELECT SubAsset FROM dbo.Container WHERE MainAsset = 25
...
Рейтинг: 0 / 0
Данные из Формуляра для Опроса в проекте (.adp)
    #32653135
magoga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Latukhttp://hiprog.com/access/article.asp?id=370
Ты должен собрать строку запроса
в которой значение Me.AssetNr должно быть вписанно в виде константы
причем если это строковая константа то она должна быть заключена в апострофы
из ошибки видно что строка содержащаяся в текстбоксе не можнт быть переведена в инт скорее всего она пустая
эту ситуацию надо обработать например так

SQLStr="SELECT SubAsset FROM dbo.Container " & iif(IsNull(Me.AssetNr),"","WHERE MainAsset = " & Me.AssetNr)
MyCombo.RowSourse = SQLStr

еще можно обработать случай ввода нечислового или не целого значения

в результате выполнения RowSourse поля со списком должно содержать что-то типа
SELECT SubAsset FROM dbo.Container WHERE MainAsset = 25

Я уже совсем запутался. Я ещё никогда не делал проекта(.adp) и поэтому мне не совсем понятно.
То что ты посоветовал куда мне вставить, в событие AfterUpdate текстбокса? Если так, то мне точно не всё понятно.
команда
SELECT SubAsset FROM dbo.Container " & IIf(IsNull(Me.AssetNr), "", "WHERE MainAsset = " & Me.AssetNr)
выдаст мне весь список СубАссетс, в то время как мне нужно только значение текстбокса.

и что такое MyCombo?
Не мог бы мне подробней написать плиз? Я ведь не профи.
...
Рейтинг: 0 / 0
Данные из Формуляра для Опроса в проекте (.adp)
    #32653224
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для того чтобы понять как работает
в событие после обновления текстбокса
вставь для начала

Private Sub ТвойТекстбокс_AfterUpdate()
ТвойКомбобокс.RowSource = "SELECT SubAsset FROM dbo.Container WHERE MainAsset = 25"
End Sub

где 25 какое либо число значение которого может приобретать текстбокс
при изменении значения текстбокса сработает код
и источик комбо будет отфильтрован MainAsset = 25
Работает?
пойдем дальше
замени константу на значение текстбокса
при этом когда будеш вводить значение вводи только целое число
получится динамически собранный запрос

Private Sub ТвойТекстбокс_AfterUpdate()
ТвойКомбобокс.RowSource = "SELECT SubAsset FROM dbo.Container WHERE MainAsset = " & ТвойТекстбокс
End Sub
Работает?
еще раз прочитай ссылку это вариант №2
http://hiprog.com/access/article.asp?id=370
возможно в твоем случае будет проще с 3-м
при усложнении запроса
контролируй его правильность
просматривая результат выражения которым ты заполняеш ТвойКомбобокс.RowSource
в конструкторе запросов
а лучше наоборот нарисуй запрос в конструкторе применяя константы
а потом замени их в тексте на сборку " & ТвойТекстбокс & " ...
PS UNION в конструкторе не потдерживается
но ты можеш просмотреть каждую из частей запроса отдельно
выделив ее и правой кнопкой мыши меню-конструктор.
...
Рейтинг: 0 / 0
Данные из Формуляра для Опроса в проекте (.adp)
    #32677159
magoga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не застал твоё последнее сообщение потому что уехал в отпуск.

Private Sub ТвойТекстбокс_AfterUpdate()
ТвойКомбобокс.RowSource = "SELECT SubAsset FROM dbo.Container WHERE MainAsset = " & ТвойТекстбокс
End Sub


Я никак не могу понять что ты подразуемеваешь под ТвойКомбобокс? У меня нет такого Комбобокса.
Нужно ли мне создать новый КомбоБокс под таким названием? Могу ли я сохранить значение перемонной из ТекстБокса и использоватъ как критерий отбора в команде "WHERE" ногого запроса?
...
Рейтинг: 0 / 0
Данные из Формуляра для Опроса в проекте (.adp)
    #32677202
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>что ты подразуемеваешь под ТвойКомбобокс
вместо "ТвойКомбобокс" в коде вставляй имя контрола типа поле со списком
из своей формы,источник которого собираешся изменить.
вместо "ТвойТекстбокс" в коде вставляй имя контрола из своей формы
значение которого собираешся использовать как параметр запроса.
...
Рейтинг: 0 / 0
Данные из Формуляра для Опроса в проекте (.adp)
    #32677255
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 magoga: Держи код, переделай под себя и не заморачивайся
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Private Sub Form_Load()
If Me.Ed_fl =  0  Then
    Me.Declarant = Forms!PassForm!PassForm_nam
    Me.Contr_yes_fl = False
    Me.Contract_for_pay.Enabled = False
    Me.Contract_for_pay.Enabled = False
    Me.Need_yes.Enabled = False
    Me.Kurr_OK.Enabled = False
    Me.Doc_yes.Enabled = False
    Me.Klass_corr_yes.Enabled = False
    Me.Budget_yes.Enabled = False
    Me.Strategy_yes.Enabled = False
    Me.Security_yes.Enabled = False
    Me.OK.Enabled = False
    Me.Reject_cmd.Visible = False
    Me.OK_cmd.Visible = True
    Me.Undo_cmd.Visible = True
    Me.Budget_cmd.Visible = False
End If
DoCmd.Maximize
Phase.Enabled = True
Me("Account").RowSource = "exec " & Chr( 34 ) & "vv_account" & Chr( 34 ) & " " & Chr( 34 ) & Me("P_R_V") & Chr( 34 ) & "," & Chr( 34 ) & Me("PHASE") & Chr( 34 )
End Sub
...
Рейтинг: 0 / 0
Данные из Формуляра для Опроса в проекте (.adp)
    #32677953
magoga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я уже достал вас всех.
Но у меня ни фига не работает.
Создал КомбоБокс "MyCombo"
Создал событие для ТекстБокса "AssetNr":

Private Sub AssetNr_AfterUpdate()
MyCombo.RowSource = "SELECT SubAsset FROM dbo.Container WHERE MainAsset = " & AssetNr
End Sub

Запускаю, но в КомбоБоксе ничего нет.
Готов уже разнести свой копм на части. :(
...
Рейтинг: 0 / 0
Данные из Формуляра для Опроса в проекте (.adp)
    #32678407
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
После запуска в комбо ничего и не должно быть
будет только после обновления AssetNr
а чтобы до этого там че нибудь было
надо туды ченить(SELECT SubAsset FROM dbo.Container) вставить на запуске (Open,load итп)
или просто в конструкторе (така следить чтобы туды мусор не попал
ежели ты после смены источника захочеш форму в конструкторе поюзать)

PS я так понял AssetNr целое число
Не забудь обработать случаи когда в AssetNr будет нецелое число,NULL,'' или еще какаянибудь чуш ато у табе не запрос получится а какаято ерунда :)
...
Рейтинг: 0 / 0
Данные из Формуляра для Опроса в проекте (.adp)
    #32681184
magoga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за помомщь.
Теперь работает.
В данном случае мы "отправляем" данные в Листбокс из Текстбокса. А всё же, как создать переменную из текущего значения Текстбокса, значение которой я мог бы использовать во "View"?
И чем можно заменить команду UNION? Мне нужно чтобы лист ответа запроса был с одним столбцом. Вот мой запрос из старой программы в .mdb:

SELECT DISTINCT a.SubAsset
FROM Container AS a LEFT JOIN Container AS b ON a.SubAsset=b.MainAsset
WHERE a.MainAsset=[Forms].[Assets].[Asset #]
UNION SELECT DISTINCT b.SubAsset
FROM Container AS a LEFT JOIN Container AS b ON a.SubAsset=b.MainAsset
WHERE a.MainAsset=[Forms].[Assets].[Asset #];

Заранее благодарю.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Данные из Формуляра для Опроса в проекте (.adp)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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