|
|
|
Пользовательская функция в базе ACCESS
|
|||
|---|---|---|---|
|
#18+
В таблице есть поля, содержащие текст в формате "параметр=значение". Например: ALTNAME Параметр1=Значение1Параметр2=Значение2Параметр3=Значение3 Я хотел сделать в ACCESS так называемый ЗАПРОС, разбивающий эти списки и возвращающий значения параметров как отдельные поля. Сделал на VBA функцию: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. В ACCESS использовал так: Код: plsql 1. 2. 3. 4. 5. НО ЖЕСТКО ОБЛОМАЛСЯ ((( когда вызвал запрос из программы на Delphi. Получил ошибку: Неопределенная функция 'ValueFromList' в выражении. Ясно, что извне не доступен VBA. Что можно придумать, чтобы не писать для каждого параметра порнуху типа этой: Код: plsql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2015, 21:15:57 |
|
||
|
Пользовательская функция в базе ACCESS
|
|||
|---|---|---|---|
|
#18+
Тривиальным запросом преобразуй таблицу в вид Pname PvalueПараметр1Значение1 Параметр2Значение2 Параметр3Значение3 А потом PIVOT (TRANSFORM). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2015, 22:31:48 |
|
||
|
Пользовательская функция в базе ACCESS
|
|||
|---|---|---|---|
|
#18+
Еще можно оформить ValueFromList в виде dll. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2015, 22:51:30 |
|
||
|
Пользовательская функция в базе ACCESS
|
|||
|---|---|---|---|
|
#18+
товарищи, не могли бы Вы о предложенном рассказать подробнее? Akina, такой тривиальный запрос не приходит в голову, т.к. это не таблица. Я наверно недостатчно ясно описал: Вся табличка, которую я нарисовал в 17596478 - это значение одного поля MEMO. uux, Помню для SQL Server делал процедуру в виде DLL. Но для ACCESS что-то сомневаюсь теперь. Разве эта функция из DLL будет доступна вне ACCESS ? Где почитать подробнее ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2015, 23:06:49 |
|
||
|
Пользовательская функция в базе ACCESS
|
|||
|---|---|---|---|
|
#18+
А если в два запроса? 1-ый. Называется Cross_Query Код: sql 1. 2. 3. 4. 5. 6. 2-ой. Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2015, 00:45:36 |
|
||
|
Пользовательская функция в базе ACCESS
|
|||
|---|---|---|---|
|
#18+
__Michelle, мало что понял. скопировал первый запрос - access ругнулся Недопустимый вызов процедуры ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2015, 00:59:40 |
|
||
|
Пользовательская функция в базе ACCESS
|
|||
|---|---|---|---|
|
#18+
Ghost Writer, Сейчас сделаю БД, выложу. Должно работать, думаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2015, 01:07:32 |
|
||
|
Пользовательская функция в базе ACCESS
|
|||
|---|---|---|---|
|
#18+
Ghost Writer, Можно сделать доп.табличку со списком параметров и тогда попроще будет чем через строковые функции парсить (Если вдруг доп.таблицу создавать нельзя, то её можно заменить на подзапрос, по типу Digits-а) Осн.таблица - Tab Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Доп.таблица - Param NAMEПараметр1Параметр2Параметр3Параметр4Параметр5Параметр6 Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. результат idNAMEvalue1Параметр1Значение11Параметр2Значение21Параметр3Значение32Параметр1Значение12Параметр5Значение52Параметр6Значение6 и нужно будет ещё добавить во внешний запрос TRANSFORM / PIVOT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2015, 01:17:52 |
|
||
|
Пользовательская функция в базе ACCESS
|
|||
|---|---|---|---|
|
#18+
Ну вот база. Попробуйте. У меня работает. Нужно открыть запрос Запрос2. Сделала в Access 2000, другого сейчас под рукой нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2015, 01:18:45 |
|
||
|
Пользовательская функция в базе ACCESS
|
|||
|---|---|---|---|
|
#18+
Вот результат запроса Запрос2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2015, 01:19:51 |
|
||
|
Пользовательская функция в базе ACCESS
|
|||
|---|---|---|---|
|
#18+
Ghost Writeruux, Помню для SQL Server делал процедуру в виде DLL. Но для ACCESS что-то сомневаюсь теперь. Разве эта функция из DLL будет доступна вне ACCESS ? Где почитать подробнее ? Ох... Я в этом вопросе, к сожалению, гораздо больше теоретик, чем практик - знаю, что в принципе обращаться из VBA к dll-кам можно, но в жизни с такими задачами почти не сталкивался. Тем не менее, вы совершенно точно можете сделать нужную dll при помощи Delphi, а потом обратиться к ней из Access (да и вообще из практически любого приложения с VBA). Почитать можно в Аксовском (точнее, вба-шном) хелпе по ключевому слову Declare. Ну или вот ссылка нвскидку . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2015, 08:11:41 |
|
||
|
Пользовательская функция в базе ACCESS
|
|||
|---|---|---|---|
|
#18+
uux, мне как раз НЕ из Access обращаться нужно, а из программы на Delphi и web странички на ASP. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2015, 12:08:15 |
|
||
|
Пользовательская функция в базе ACCESS
|
|||
|---|---|---|---|
|
#18+
__Michelle, большое спасибо за такой подробный ответ. Но, это не совсем мой случай. Как я писал выше: Ghost WriterВся табличка, которую я нарисовал в 17596478 - это значение одного поля MEMO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2015, 12:14:09 |
|
||
|
Пользовательская функция в базе ACCESS
|
|||
|---|---|---|---|
|
#18+
8871, хмм. доп.табличку создать можно. Попробовал ваш запрос... Работает, но дублирует записи по кол-ву параметров в доп. табличке. Понятно, что по вашей задумке еще нужно TRANSFORM / PIVOT, но я затрудняюсь понять как их использовать. Не могли бы вы в ваш код еще TRANSFORM / PIVOT воткнуть ? Еще попутно вопрос. Эти TRANSFORM / PIVOT должны работать в Windows Server 2003, офис 2003 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2015, 12:56:15 |
|
||
|
Пользовательская функция в базе ACCESS
|
|||
|---|---|---|---|
|
#18+
Ghost WriterЕще попутно вопрос. Эти TRANSFORM / PIVOT должны работать в Windows Server 2003, офис 2003 ?да Ghost Writerхмм. доп.табличку создать можно. Попробовал ваш запрос... Работает, но дублирует записи по кол-ву параметров в доп. табличке. Понятно, что по вашей задумке еще нужно TRANSFORM / PIVOT, но я затрудняюсь понять как их использовать. Не могли бы вы в ваш код еще TRANSFORM / PIVOT воткнуть ? В эту доп.табличку ещё можно алиасы для полей сразу вписать, что бы потом их в запросе не "выписывать" каждый раз NAMEAliasNAMEПараметр1KPPПараметр2SPZПараметр3GMUПараметр4ASDПараметр5FGHПараметр6JKL и такой запрос тогда Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. idFGHGMUJKLKPPSPZ1Значение3Значение1Значение22Значение5Значение6Значение1 Если нужно выводить не все параметры, или важен их порядок в результате запроса, то нужно перечислить их в PIVOT Код: sql 1. idKPPSPZGMU1Значение1Значение2Значение32Значение1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2015, 13:43:17 |
|
||
|
Пользовательская функция в базе ACCESS
|
|||
|---|---|---|---|
|
#18+
5032, круто, спасибо большое. Но одна загвоздка: запрос возвращает не все записи, а только те, которые, я так полагаю, отвечают условию WHERE Tab.ALTNAME like "*" & Param.NAME & "*") t. А надо бы все записи, и если нет Param.NAME, то вывести пустое значение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2015, 14:00:19 |
|
||
|
Пользовательская функция в базе ACCESS
|
|||
|---|---|---|---|
|
#18+
Ghost Writer5032, круто, спасибо большое. Но одна загвоздка: запрос возвращает не все записи, а только те, которые, я так полагаю, отвечают условию WHERE Tab.ALTNAME like "*" & Param.NAME & "*") t. А надо бы все записи, и если нет Param.NAME, то вывести пустое значение.т.е. там вообще ни одного параметра в Мемо поле нет, так? Тогда так: WHERE - убрать вообще, а условие перенести в IIf Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2015, 14:22:36 |
|
||
|
Пользовательская функция в базе ACCESS
|
|||
|---|---|---|---|
|
#18+
8630т.е. там вообще ни одного параметра в Мемо поле нет, так?просто у разных записей может быть разный набор параметров. А также, может быть параметр с пустым значением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2015, 17:54:13 |
|
||
|
Пользовательская функция в базе ACCESS
|
|||
|---|---|---|---|
|
#18+
8630 Код: sql 1. всё равно результат не полный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2015, 18:53:07 |
|
||
|
Пользовательская функция в базе ACCESS
|
|||
|---|---|---|---|
|
#18+
Ghost Writer8630т.е. там вообще ни одного параметра в Мемо поле нет, так?просто у разных записей может быть разный набор параметров. А также, может быть параметр с пустым значением. тогда Код: vbnet 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2015, 19:12:50 |
|
||
|
Пользовательская функция в базе ACCESS
|
|||
|---|---|---|---|
|
#18+
непоймучкаGhost Writerпропущено... просто у разных записей может быть разный набор параметров. А также, может быть параметр с пустым значением. тогда Код: vbnet 1. 2. 3. 4. 5. 6. 7. Я так пробовал, Акс ошибку давал про "невозможна связь по полю Мемо/ОЛЕ", а у ТС поле ALTNAME - Мемо. Вообще, я не знаю что там у него за "результат не полный" ... Последняя версия запроса это кросс джойн таблиц, там - "лишнего" много должно быть, но никак не "не полный" ... Ждём-с, может ТС таки "созреет" на пример )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2015, 19:31:01 |
|
||
|
Пользовательская функция в базе ACCESS
|
|||
|---|---|---|---|
|
#18+
4977, прошу прощения. Действительно, последний вариант даёт полный результат. Просто умудрился я накосячить, когда копировал выделенное желтым ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2015, 19:45:22 |
|
||
|
Пользовательская функция в базе ACCESS
|
|||
|---|---|---|---|
|
#18+
Опять фиаско. В Access всё красиво, а когда выполняю запрос из своей программы, то все эти поля из AliasNAME - пустые . Остальные, которые существуют в таблице, нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2015, 20:16:11 |
|
||
|
Пользовательская функция в базе ACCESS
|
|||
|---|---|---|---|
|
#18+
[quot Ghost Writer]Опять фиаско. В Access всё красиво, а когда выполняю запрос из своей программы, то все эти поля из AliasNAME - пустые . Остальные, которые существуют в таблице, нормально.[/quot Если программа использует АДО, то вот это Код: sql 1. измени на Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2015, 20:29:04 |
|
||
|
|

start [/forum/search_topic.php?author=Gavrysh&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
46ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
| others: | 3176ms |
| total: | 3341ms |

| 0 / 0 |
