powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Уже клинит... (сорри за название топика - просто клинит уже)
25 сообщений из 44, страница 1 из 2
Уже клинит... (сорри за название топика - просто клинит уже)
    #32181736
Фотография Нуф-нуф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну подскажите, млин, плз., млин, как мне, млин, передать, млин, эти гребанные, млин, параметры, да?!!!

Имеем Public Function в классе, которая принимает один параметр:
- либо имя сохраненного запроса (строковое значение);
- либо расчлененный на предложения текст запроса (SELECT, FROM, и т.п.), т.е. несколько строковых значений.
Если функция принимает имя сохраненного запроса , то никаких особенных действий не производится - параметр передается дальше по цепочке и все. А вот если передается сам текст запроса, то функция над ним колдует - над предложением СЕЛЕКТ отдельно, над ФРОМ - отдельно, над ОРДЕР БАЙ - отдельно и т.п.
Т.е. я не могу (не хочу) передавать текст запроса в одной строковой переменной, ибо придется устраивать синтаксический анализ, что займет как машинное время (на анализ), так и мое (на творение нетленного кода).
В итоге, создал пользовательский тип, где и перечислил несколько строковых переменных, призванных хранить предложения запроса по отдельности, но, мля, передать в функцию не могу, ибо параметр функции делаю Variantом (ну чтобы можно было передать либо строковую переменную с именем сохраненного запроса, либо передать переменную с пользовательским типом), а эта падл?ка пишет, что нельзя передавать пользовательский тип через Вариантовую переменную!!! (см.примечание)
Ну и что мне теперь, в принимающую функцию два параметра вставлять - один для имени а второй для текста запроса?! Или в пользовательский тип добавлять "ИмяСохраненногоЗапроса", наряду с "Селект", "Фром"?! Передавать через объект (класс)?!!! Через массив?!!!!!!!
Да еще и все это умножить на 2, ибо передаются данные сразу о двух запросах! :( Да еще и с кодом этим другие программеры работать будут :(((((

Как ни кручу - хрень, достойная стенда "Так делать не красиво " получается!
F1!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

з.ы. и пжалста, не надо "нахр тебе это надо", ибо сам не знаю, нахр?н мне все это надо вообще, мля...

ПРИМЕЧАНИЕ (Ошибка компиляции):
Only public user defined types defined in public object modules can be used as parameters or return types for public procedures of class modules or as fields of public user defined types

This error has the following cause and solution:
You attempted to use a public user defined type as a parameter or return type for a public procedure of a class module, or as a field of a public user defined type. Only public user defined types that are defined in a public object module can be used in this manner.
...
Рейтинг: 0 / 0
Уже клинит... (сорри за название топика - просто клинит уже)
    #32181737
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А у тебя небось тоже 97-й аксес :))
В 2000-м вроде уже можно передавать свои типы :)
Сделай свой клас вместо своего типа. Это самое простое. А по красивости - почти также. Иногда и лучше.
...
Рейтинг: 0 / 0
Уже клинит... (сорри за название топика - просто клинит уже)
    #32181739
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В 2002-м точно можно свои типы передавать. Только что проверил. Так что эта.. попал ты. Или на смену офиса, или на написание класса с кучкой public property ... () as string
...
Рейтинг: 0 / 0
Уже клинит... (сорри за название топика - просто клинит уже)
    #32181750
Фотография Нуф-нуф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2000-ный...
Млин, могу десяток способов привести, как это можно сделать, если повыпендриваюсь, то еще десяток, а выбрать, поверишь, не могу, мля :(

Сделаем через класс...
Псиб за выбор :)
...
Рейтинг: 0 / 0
Уже клинит... (сорри за название топика - просто клинит уже)
    #32181813
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
О Боже мой!!!

А Optional почему не подходит? И тогда по количеству переданных параметров сразу видно, чтО передано в функцию.
...
Рейтинг: 0 / 0
Уже клинит... (сорри за название топика - просто клинит уже)
    #32181848
Фотография Нуф-нуф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А потому что Optional совместно с пользовательским типом использовать (во всяком случае в а2000) незя (см. Ошибка компиляции).

Уже сделал через класс. Хотя, конечно, не очень то красиво получается - для того чтобы передать расчлененную конструкцию запроса необходимо создать объект. Да к тому же и еще один модуль класса добавился (не очень то и нужный). Но... но более "красивого" решения пока не вижу. А?

з.ы. ПарамАррэй тоже не подходит, т.к. функция принимает данные сразу по 2-м запросам и разобраться кто-есть где и от кого будет оч.сложно. Есть вариант с именованными аргументами, но опять же, одни головняки :(

Ошибка компиляции:
Invalid optional parameter type

Not all Visual Basic types are permitted for Optional parameters. This error has the following causes and solutions:

A parameter is defined with an invalid data type.
For example, you can't have an Optional parameter of user-defined type. You may be able to accomplish your goal using an array of Variant type, since the elements of an array of Variant can store data of different types.
...
Рейтинг: 0 / 0
Уже клинит... (сорри за название топика - просто клинит уже)
    #32181858
Фотография Нуф-нуф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>О Боже мой!!!
Млин, Саныч, ну кто-то же должен веселить народ
...
Рейтинг: 0 / 0
Уже клинит... (сорри за название топика - просто клинит уже)
    #32181861
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
О Боже мой дубль два!!!

> А потому что Optional совместно с пользовательским типом использовать (во всяком случае в а2000) незя (см. Ошибка компиляции).

Так не надо совместно с пользовательским типом. От многия мудрости многия печали. Обычный String тут, по-моему, в самый раз.
...
Рейтинг: 0 / 0
Уже клинит... (сорри за название топика - просто клинит уже)
    #32181897
Фотография Нуф-нуф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Обычный String тут, по-моему, в самый раз.
Ну тады, держитесь
Передайте, пжалста, в качестве описания первого сохраненного запроса его имя, а в качестве описания второго - его конструкцию, при этом я вам предоставляю метод класса, который (по вашему) будет выглядеть так:

Object.DetermineRecordSource( [FirstSavedQueryName As String], [FirstSQL_BeforeSELECT As String], [FirstSQL_SELECT As String], [FirstSQL_FROM As String], [FirstSQL_WHERE As String], [FirstSQL_GROUPBYAndHAVING As String], [FirstSQL_ORDERBY As String], [FirstSQL_AfterORDERBY As String], [SecondSavedQueryName As String], [SecondSQL_BeforeSELECT As String], [SecondSQL_SELECT As String], [SecondSQL_FROM As String], [SecondSQL_WHERE As String], [SecondSQL_GROUPBYAndHAVING As String], [SecondSQL_ORDERBY As String], [SecondSQL_AfterORDERBY As String] )

(естественно, все параметры - Оптионал, просто не знаю как отреагирует форум на квадратные скобки, эдакие "теги" :)

Лично если бы мне пришлось работать с таким "программным интерфейсом" к классу, то я бы писал для себя надстройку, в которую и передавал бы все следующим образом:
Object.DetermineRecordSource(FirstQuery as Variant, SecondQuery as Variant)
где в Variant пихал бы либо имя запроса, либо структуру, описывающую онный, что, собстна, и пытаемся сделать...

Есть разница? ;)

з.ы. В третьем дубле, пжалста, на пальцах, если можно
...
Рейтинг: 0 / 0
Уже клинит... (сорри за название топика - просто клинит уже)
    #32181907
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А, так их двое! Тьфу.

Ну, тогда самое простое - это передавать пустые стринги на месте ненужных параметров.
...
Рейтинг: 0 / 0
Уже клинит... (сорри за название топика - просто клинит уже)
    #32181910
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Или по-другому: структура, одна и та же для обоих случаев, и пустые стринги в лишних полях в случае имени запроса.
...
Рейтинг: 0 / 0
Уже клинит... (сорри за название топика - просто клинит уже)
    #32181915
V. Motchulsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>Нуф-нуф
Если не в облом, что Ты там такое задумал? В чем ОСНОВНАЯ идея? В динамическом интерфейсе, как мы знаем, была идея убедить себя, что бы убедить заказчика, не делать это. Вопрос "нахр тебе это надо " не задаю, но и нельзя же так озадачивать других, я покрайней мере не могу сразу прикинуть "нахр это надо".
...
Рейтинг: 0 / 0
Уже клинит... (сорри за название топика - просто клинит уже)
    #32181918
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Кстати, ведь даже если и удастся передавать в один параметр то стринг, то структуру, - все равно потом придется внутри функции как-то проверять, что передано. А это новая проблема. А если структура в обоих случаях одна и та же, то никаких проблем нет.
...
Рейтинг: 0 / 0
Уже клинит... (сорри за название топика - просто клинит уже)
    #32181930
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Type MyType
    SavedQueryName As String
    SQL_BeforeSELECT As String
    SQL_SELECT As String
    SQL_FROM As String
    SQL_WHERE As String
    SQL_GROUPBYAndHAVING As String
    SQL_ORDERBY As String
    SQL_AfterORDERBY As String
End Type

Funcion DetermineRecordSource(FirstQuery as MyType, SecondQuery as MyType)
    If FirstQuery.SavedQueryName = "" Then
        ...
...
Рейтинг: 0 / 0
Уже клинит... (сорри за название топика - просто клинит уже)
    #32181935
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Кроме того, вариации (на случай если так не пойдет): вместо структуры класс; вместо Variant - Object.
...
Рейтинг: 0 / 0
Уже клинит... (сорри за название топика - просто клинит уже)
    #32181958
Фотография Нуф-нуф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для Владимир Саныч:
>Или по-другому: структура, одна и та же для обоих случаев, и пустые стринги в лишних полях в случае имени запроса.
Ни-фи-га не понял (говорю же, клинит уже... или вообще, по жизни:) Т.е. я должен сделать так:
Object.DetermineRecordSource(ИмяСохрЗапроса, , , , , , , , , , "SELECT то-то и то-то", "FROM оттудова с джойном с тем-то", "WHERE то-то равно этому-то", , "ORDER BY так-то") ?!!!
Млин... Убил бы себя! :)

для V. Motchulsky
>В чем ОСНОВНАЯ идея?
Я не очень догнал (см. "для Владимир Саныч" про "клинит":) какой уровень основной идеии имеется в виду.
Вобще-то, основная идея в топике - как передать классу два SQL-запроса - либо уже имеющийся сохраненный, либо динамически формируемый...
Зачем либо сохраненный либо формируемый? Ну дык... хм... Универсальность, будь она неладна, и расширение свобод программеров (и так постоянно отнимают, вон, даже через Вариант передать собстный тип не дают:). Хотя, попробую объяснить поподробней, но тока шобы враги не видели

Зачем два запроса? Ну это из-за выбранной, даже не знаю как и назвать, политики, что ли. Млин... Топик не очень популярный (из-за названия наверно:), поэтому можно открыть крутое ноу-хау в области эффективного доступа к информации Вобщем, грид может (и должен по всему проекту) уметь переключаться с отображения данных, входящих в некую "Группу" (ГРУППА), на данные, входящие в некоторую другую "Группу" (ИСТОЧНИК_ДЛЯ_ГРУППЫ), при этом последние рассматриваются как Источник_данных_для_Группы. Поясню на примере. Открываем форму оприходования товара от Поставщика Х, при этом грид отображает только те товары, которые у него закупаются. Бабах и оказалось, что вдруг стали закупать еще 10-к товаров, которые закупались ранее у Поставщика Y, т.е. надо добавить в ГРУППУ товаров Поставщика Х товары, которые доставляет Поставщик Y. Как это обычно делается? Правильно... Открывается (обычно в отдельном окне, при этом для каждого добавляемого товара надо переключаться между окнами) общий справочник товаров на 15 000 наименований, в них отлавливаются эти 10 и добавляются в группу. А при помощи описываемой системы достаточно в "Проводнике" (3Вью, кудаж без него:) выбрать ЛЮБУЮ группу (группу товаров, классифицированную как угодно: по поставщикам и клиентам, по категориям и производителям, по распределению по прайс-листам, по продаваемости, по... по... по...), при этом автоматически Грид переключается в режим Источник_данных_для_Группы, где можно увидеть входит ли товар из ГРУППЫ в ИСТОЧНИК_ДЛЯ_ГРУППЫ, и если не входит, то простым движением (по кнопочке Insert, по редактированию записи, групповым выделением и т.п.) добавить етот товар из ИСТОЧНИКА_ДЛЯ_ГРУППЫ в саму ГРУППУ. Всю эту хрень автоматом выполняет связка "Грид + Проводник". Система работает уже второй год в трех независимых проектах и отзывы отовсюду (на счет юзабилити) очень хорошие. Правда лага в том, что выполнена сия связка "в лоб" и чтобы настроить ее под новый проект приходится ОЧЕНЬ сильно выпендриваться. Вот и встал вопрос о создании компонента , чем, собстна, и занимается в свободное от работы, друзей, дЭвушки и т.п., время.
Таким образом, я пытаюсь передать в Грид запрос, возвращающий Группу и запрос, возвращающий Источник данных для группы. Второй практически всегда формируется "Проводником" и грид лишь его немного настраивает под свои нужды (ну тока так получается добиться хоть мал-мальской универсальности).
з.ы. ну и какие будут пжелания ? :) Вирусы писать?
...
Рейтинг: 0 / 0
Уже клинит... (сорри за название топика - просто клинит уже)
    #32181965
Фотография Нуф-нуф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну вот, пока писал уже топик обновился...
для Владимир Саныч
Вариант от 13:57 пробовал. Не подходит по той простой причине, что
параметры в функции должны быть не обязательными, при чем оба! Т.е.
может быть передан первый запрос без второго, может быть наоборот.
При этом Оптионал совместно с пользовательским типом не прокатывает...
Все-таки, пока через класс наверно...
...
Рейтинг: 0 / 0
Уже клинит... (сорри за название топика - просто клинит уже)
    #32181966
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> Ни-фи-га не понял

Боже мой дубль три, на этот раз с полным чувством собственной правоты!

Я же написал кусок программы. Сантиметров на 5 выше.
...
Рейтинг: 0 / 0
Уже клинит... (сорри за название топика - просто клинит уже)
    #32181967
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> Т.е. может быть передан первый запрос без второго, может быть наоборот.

Ну так пусть по наличию пустых стрингов различаются 3 случая (3-й - пустой).
...
Рейтинг: 0 / 0
Уже клинит... (сорри за название топика - просто клинит уже)
    #32181979
Фотография Нуф-нуф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да не катит МойКласс.МойМетод(Optional ТоТо As MeType , Optional ТоТо2 As MyType )!
То есть не возможно будет пропустить один из параметров!

Хотя, можно ведь и не пропускать, а просто передать пустую структуру (со всеми пустыми строками, что и будет расцениваться, как не переданный параметр...) Надо подумать...
Владимир Саныч спасибо за еще один вариант

з.ы.
>Боже мой дубль три,
Ну не видел я когда постил... :)
...
Рейтинг: 0 / 0
Уже клинит... (сорри за название топика - просто клинит уже)
    #32181982
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> Владимир Саныч спасибо за еще один вариант

Тогда еще один. В структуре добавляем еще одно поле, у которого будет 3 возможных значения. И проверяем его, а не пустые стринги. Память будет расходоваться больше, но зато так аккуратнее.
...
Рейтинг: 0 / 0
Уже клинит... (сорри за название топика - просто клинит уже)
    #32182093
V. Motchulsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Топик не очень популярный.
Явление временное, пока враги не увидели... :)

По "основной" идеи.
Вопрос может ли товар с одной группы входить в другую, тоесть быть одновременно в двух группах?

По "реализации".
Пока, я за строку. Зачем проводить синтетический анализ запроса, он что пользователем будут создаваться? Пока не вижу смысла разбивать запрос на части, что бы потом обратно склеить. Да вот и хранимые процедуры просятся для полной универсальности.
...
Рейтинг: 0 / 0
Уже клинит... (сорри за название топика - просто клинит уже)
    #32182097
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> Пока не вижу смысла разбивать запрос на части, что бы потом обратно склеить.

Это оттого, что автор вопроса не выплюхнул перед нами весь проект. И, кстати, правильно, что не выплюхнул.
...
Рейтинг: 0 / 0
Уже клинит... (сорри за название топика - просто клинит уже)
    #32182113
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
2 Нуф-нуф:

Ну как, уже не клинит?
...
Рейтинг: 0 / 0
Уже клинит... (сорри за название топика - просто клинит уже)
    #32182115
V. Motchulsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это оттого, что автор вопроса не выплюхнул перед нами весь проект
Частично согласен. Только чем больше сведений, тем полезнее советы других. Тут уж выкручивайся как хотишь. Я тут дочитался функция над ним колдует - над предложением СЕЛЕКТ отдельно, над ФРОМ - отдельно, над ОРДЕР БАЙ - отдельно и т.п. Чутье подсказывает, что не те параметры надо передавать или существует более простое, более элегантное решение. Но не посмотрев в корень проблемы, тяжело предложить другой способ решения. Мне как то больше нравится решать задачу спереди, а не сзаду наперед. Ну допустим, передадим мы все эти параметры без проблем, а кто гарантирует, что мы на истином пути? Тут хоть закрытую переписку веди.
И еще, если универсальность, то как колдовать над сохраненным запросом? Блин и с рекордсетами, чувствую придется мне их реабиалитировать.
...
Рейтинг: 0 / 0
25 сообщений из 44, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Уже клинит... (сорри за название топика - просто клинит уже)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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