|
|
|
Уже клинит... (сорри за название топика - просто клинит уже)
|
|||
|---|---|---|---|
|
#18+
Ну подскажите, млин, плз., млин, как мне, млин, передать, млин, эти гребанные, млин, параметры, да?!!! Имеем 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2003, 20:56 |
|
||
|
Уже клинит... (сорри за название топика - просто клинит уже)
|
|||
|---|---|---|---|
|
#18+
А у тебя небось тоже 97-й аксес :)) В 2000-м вроде уже можно передавать свои типы :) Сделай свой клас вместо своего типа. Это самое простое. А по красивости - почти также. Иногда и лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2003, 21:00 |
|
||
|
Уже клинит... (сорри за название топика - просто клинит уже)
|
|||
|---|---|---|---|
|
#18+
В 2002-м точно можно свои типы передавать. Только что проверил. Так что эта.. попал ты. Или на смену офиса, или на написание класса с кучкой public property ... () as string ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2003, 21:04 |
|
||
|
Уже клинит... (сорри за название топика - просто клинит уже)
|
|||
|---|---|---|---|
|
#18+
2000-ный... Млин, могу десяток способов привести, как это можно сделать, если повыпендриваюсь, то еще десяток, а выбрать, поверишь, не могу, мля :( Сделаем через класс... Псиб за выбор :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2003, 21:39 |
|
||
|
Уже клинит... (сорри за название топика - просто клинит уже)
|
|||
|---|---|---|---|
|
#18+
О Боже мой!!! А Optional почему не подходит? И тогда по количеству переданных параметров сразу видно, чтО передано в функцию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2003, 10:42 |
|
||
|
Уже клинит... (сорри за название топика - просто клинит уже)
|
|||
|---|---|---|---|
|
#18+
А потому что 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2003, 11:43 |
|
||
|
Уже клинит... (сорри за название топика - просто клинит уже)
|
|||
|---|---|---|---|
|
#18+
>О Боже мой!!! Млин, Саныч, ну кто-то же должен веселить народ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2003, 11:54 |
|
||
|
Уже клинит... (сорри за название топика - просто клинит уже)
|
|||
|---|---|---|---|
|
#18+
О Боже мой дубль два!!! > А потому что Optional совместно с пользовательским типом использовать (во всяком случае в а2000) незя (см. Ошибка компиляции). Так не надо совместно с пользовательским типом. От многия мудрости многия печали. Обычный String тут, по-моему, в самый раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2003, 12:03 |
|
||
|
Уже клинит... (сорри за название топика - просто клинит уже)
|
|||
|---|---|---|---|
|
#18+
>Обычный 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 пихал бы либо имя запроса, либо структуру, описывающую онный, что, собстна, и пытаемся сделать... Есть разница? ;) з.ы. В третьем дубле, пжалста, на пальцах, если можно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2003, 13:23 |
|
||
|
Уже клинит... (сорри за название топика - просто клинит уже)
|
|||
|---|---|---|---|
|
#18+
А, так их двое! Тьфу. Ну, тогда самое простое - это передавать пустые стринги на месте ненужных параметров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2003, 13:34 |
|
||
|
Уже клинит... (сорри за название топика - просто клинит уже)
|
|||
|---|---|---|---|
|
#18+
Или по-другому: структура, одна и та же для обоих случаев, и пустые стринги в лишних полях в случае имени запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2003, 13:37 |
|
||
|
Уже клинит... (сорри за название топика - просто клинит уже)
|
|||
|---|---|---|---|
|
#18+
>Нуф-нуф Если не в облом, что Ты там такое задумал? В чем ОСНОВНАЯ идея? В динамическом интерфейсе, как мы знаем, была идея убедить себя, что бы убедить заказчика, не делать это. Вопрос "нахр тебе это надо " не задаю, но и нельзя же так озадачивать других, я покрайней мере не могу сразу прикинуть "нахр это надо". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2003, 13:42 |
|
||
|
Уже клинит... (сорри за название топика - просто клинит уже)
|
|||
|---|---|---|---|
|
#18+
Кстати, ведь даже если и удастся передавать в один параметр то стринг, то структуру, - все равно потом придется внутри функции как-то проверять, что передано. А это новая проблема. А если структура в обоих случаях одна и та же, то никаких проблем нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2003, 13:44 |
|
||
|
Уже клинит... (сорри за название топика - просто клинит уже)
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2003, 13:57 |
|
||
|
Уже клинит... (сорри за название топика - просто клинит уже)
|
|||
|---|---|---|---|
|
#18+
Кроме того, вариации (на случай если так не пойдет): вместо структуры класс; вместо Variant - Object. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2003, 13:59 |
|
||
|
Уже клинит... (сорри за название топика - просто клинит уже)
|
|||
|---|---|---|---|
|
#18+
для Владимир Саныч: >Или по-другому: структура, одна и та же для обоих случаев, и пустые стринги в лишних полях в случае имени запроса. Ни-фи-га не понял (говорю же, клинит уже... или вообще, по жизни:) Т.е. я должен сделать так: Object.DetermineRecordSource(ИмяСохрЗапроса, , , , , , , , , , "SELECT то-то и то-то", "FROM оттудова с джойном с тем-то", "WHERE то-то равно этому-то", , "ORDER BY так-то") ?!!! Млин... Убил бы себя! :) для V. Motchulsky >В чем ОСНОВНАЯ идея? Я не очень догнал (см. "для Владимир Саныч" про "клинит":) какой уровень основной идеии имеется в виду. Вобще-то, основная идея в топике - как передать классу два SQL-запроса - либо уже имеющийся сохраненный, либо динамически формируемый... Зачем либо сохраненный либо формируемый? Ну дык... хм... Универсальность, будь она неладна, и расширение свобод программеров (и так постоянно отнимают, вон, даже через Вариант передать собстный тип не дают:). Хотя, попробую объяснить поподробней, но тока шобы враги не видели Зачем два запроса? Ну это из-за выбранной, даже не знаю как и назвать, политики, что ли. Млин... Топик не очень популярный (из-за названия наверно:), поэтому можно открыть крутое ноу-хау в области эффективного доступа к информации Вобщем, грид может (и должен по всему проекту) уметь переключаться с отображения данных, входящих в некую "Группу" (ГРУППА), на данные, входящие в некоторую другую "Группу" (ИСТОЧНИК_ДЛЯ_ГРУППЫ), при этом последние рассматриваются как Источник_данных_для_Группы. Поясню на примере. Открываем форму оприходования товара от Поставщика Х, при этом грид отображает только те товары, которые у него закупаются. Бабах и оказалось, что вдруг стали закупать еще 10-к товаров, которые закупались ранее у Поставщика Y, т.е. надо добавить в ГРУППУ товаров Поставщика Х товары, которые доставляет Поставщик Y. Как это обычно делается? Правильно... Открывается (обычно в отдельном окне, при этом для каждого добавляемого товара надо переключаться между окнами) общий справочник товаров на 15 000 наименований, в них отлавливаются эти 10 и добавляются в группу. А при помощи описываемой системы достаточно в "Проводнике" (3Вью, кудаж без него:) выбрать ЛЮБУЮ группу (группу товаров, классифицированную как угодно: по поставщикам и клиентам, по категориям и производителям, по распределению по прайс-листам, по продаваемости, по... по... по...), при этом автоматически Грид переключается в режим Источник_данных_для_Группы, где можно увидеть входит ли товар из ГРУППЫ в ИСТОЧНИК_ДЛЯ_ГРУППЫ, и если не входит, то простым движением (по кнопочке Insert, по редактированию записи, групповым выделением и т.п.) добавить етот товар из ИСТОЧНИКА_ДЛЯ_ГРУППЫ в саму ГРУППУ. Всю эту хрень автоматом выполняет связка "Грид + Проводник". Система работает уже второй год в трех независимых проектах и отзывы отовсюду (на счет юзабилити) очень хорошие. Правда лага в том, что выполнена сия связка "в лоб" и чтобы настроить ее под новый проект приходится ОЧЕНЬ сильно выпендриваться. Вот и встал вопрос о создании компонента , чем, собстна, и занимается в свободное от работы, друзей, дЭвушки и т.п., время. Таким образом, я пытаюсь передать в Грид запрос, возвращающий Группу и запрос, возвращающий Источник данных для группы. Второй практически всегда формируется "Проводником" и грид лишь его немного настраивает под свои нужды (ну тока так получается добиться хоть мал-мальской универсальности). з.ы. ну и какие будут пжелания ? :) Вирусы писать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2003, 14:30 |
|
||
|
Уже клинит... (сорри за название топика - просто клинит уже)
|
|||
|---|---|---|---|
|
#18+
ну вот, пока писал уже топик обновился... для Владимир Саныч Вариант от 13:57 пробовал. Не подходит по той простой причине, что параметры в функции должны быть не обязательными, при чем оба! Т.е. может быть передан первый запрос без второго, может быть наоборот. При этом Оптионал совместно с пользовательским типом не прокатывает... Все-таки, пока через класс наверно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2003, 14:36 |
|
||
|
Уже клинит... (сорри за название топика - просто клинит уже)
|
|||
|---|---|---|---|
|
#18+
> Ни-фи-га не понял Боже мой дубль три, на этот раз с полным чувством собственной правоты! Я же написал кусок программы. Сантиметров на 5 выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2003, 14:37 |
|
||
|
Уже клинит... (сорри за название топика - просто клинит уже)
|
|||
|---|---|---|---|
|
#18+
> Т.е. может быть передан первый запрос без второго, может быть наоборот. Ну так пусть по наличию пустых стрингов различаются 3 случая (3-й - пустой). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2003, 14:38 |
|
||
|
Уже клинит... (сорри за название топика - просто клинит уже)
|
|||
|---|---|---|---|
|
#18+
Да не катит МойКласс.МойМетод(Optional ТоТо As MeType , Optional ТоТо2 As MyType )! То есть не возможно будет пропустить один из параметров! Хотя, можно ведь и не пропускать, а просто передать пустую структуру (со всеми пустыми строками, что и будет расцениваться, как не переданный параметр...) Надо подумать... Владимир Саныч спасибо за еще один вариант з.ы. >Боже мой дубль три, Ну не видел я когда постил... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2003, 15:00 |
|
||
|
Уже клинит... (сорри за название топика - просто клинит уже)
|
|||
|---|---|---|---|
|
#18+
> Владимир Саныч спасибо за еще один вариант Тогда еще один. В структуре добавляем еще одно поле, у которого будет 3 возможных значения. И проверяем его, а не пустые стринги. Память будет расходоваться больше, но зато так аккуратнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2003, 15:05 |
|
||
|
Уже клинит... (сорри за название топика - просто клинит уже)
|
|||
|---|---|---|---|
|
#18+
Топик не очень популярный. Явление временное, пока враги не увидели... :) По "основной" идеи. Вопрос может ли товар с одной группы входить в другую, тоесть быть одновременно в двух группах? По "реализации". Пока, я за строку. Зачем проводить синтетический анализ запроса, он что пользователем будут создаваться? Пока не вижу смысла разбивать запрос на части, что бы потом обратно склеить. Да вот и хранимые процедуры просятся для полной универсальности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2003, 18:45 |
|
||
|
Уже клинит... (сорри за название топика - просто клинит уже)
|
|||
|---|---|---|---|
|
#18+
> Пока не вижу смысла разбивать запрос на части, что бы потом обратно склеить. Это оттого, что автор вопроса не выплюхнул перед нами весь проект. И, кстати, правильно, что не выплюхнул. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2003, 19:06 |
|
||
|
Уже клинит... (сорри за название топика - просто клинит уже)
|
|||
|---|---|---|---|
|
#18+
2 Нуф-нуф: Ну как, уже не клинит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2003, 20:30 |
|
||
|
Уже клинит... (сорри за название топика - просто клинит уже)
|
|||
|---|---|---|---|
|
#18+
Это оттого, что автор вопроса не выплюхнул перед нами весь проект Частично согласен. Только чем больше сведений, тем полезнее советы других. Тут уж выкручивайся как хотишь. Я тут дочитался функция над ним колдует - над предложением СЕЛЕКТ отдельно, над ФРОМ - отдельно, над ОРДЕР БАЙ - отдельно и т.п. Чутье подсказывает, что не те параметры надо передавать или существует более простое, более элегантное решение. Но не посмотрев в корень проблемы, тяжело предложить другой способ решения. Мне как то больше нравится решать задачу спереди, а не сзаду наперед. Ну допустим, передадим мы все эти параметры без проблем, а кто гарантирует, что мы на истином пути? Тут хоть закрытую переписку веди. И еще, если универсальность, то как колдовать над сохраненным запросом? Блин и с рекордсетами, чувствую придется мне их реабиалитировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2003, 20:42 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32182097&tid=1681110]: |
0ms |
get settings: |
7ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 411ms |

| 0 / 0 |
