![]() |
![]() |
|
как в запросе АДО сделать некие действие со строкой в таблице | ☑ | ||
---|---|---|---|---|
0
zladenuw
17.09.13
✎
17:03
|
как в запросе адо сделать такое ?
лКодАкцесс = СтрЗаменить(RecordSet.Fields(0).Value,"-",""); лАртикул = Лев(лКодАкцесс ,5)+"-"+прав(лКодАкцесс ,5); |
|||
1
Чайник Рассела
17.09.13
✎
17:06
|
что то вроде
UPDATE [ТвояТаблица] SET [ТвоеПоле] = лКодАкцесс |
|||
2
zladenuw
17.09.13
✎
17:15
|
(1) в SET я так понимаю нужно указать преобразование.
Но как это сделать. сейчас это выглядит вот так Command = Новый COMОбъект("ADODB.Command"); Command.ActiveConnection = Connection; Command.CommandText = "Select * from "+ИмяТаблицы; Command.CommandType = 1; RecordSet = Новый COMОбъект("ADODB.RecordSet"); RecordSet = Command.Execute(); ТЗ = ADOUtils.ADORecordsetToValueTable(RecordSet); |
|||
3
fisher
17.09.13
✎
17:18
|
Это можно одним запросом сделать, по-идее.
Смотри справку по диалекту SQL твоего сервера БД. Обычно UPDADE поддерживает вариант синтаксиса из SELECT'а и операции со строками там тоже нормальные есть. |
|||
4
zladenuw
17.09.13
✎
17:20
|
(3) так у меня файл Connection.Open("Driver={Microsoft Access Driver (*.mdb)};Dbq=" + мВыбФайл + ";""");
|
|||
5
fisher
17.09.13
✎
17:21
|
(4) Значит, справку по запросам ACCESS
|
|||
6
zladenuw
17.09.13
✎
17:31
|
(5) понял.
а как выбрать только несколько полей ? если указываю через запятую пишет ошибку :( |
|||
7
fisher
17.09.13
✎
17:34
|
(6) Читай справку. Был там какой-то прикол в аксесс. Типа надо спереди имени поля еще чего-то приписывать. А то еще и в скобки какие-то брать... Давно дело было :)
|
|||
8
zladenuw
17.09.13
✎
17:49
|
ужас. да пробовал имя таблицы. дало ошибку. а вот на счет полей в скобки пробую. где то видел
|
|||
9
zladenuw
17.09.13
✎
17:52
|
(7) вот что пишет.
[Microsoft][Драйвер ODBC Microsoft Access] Слишком мало параметров. Требуется 2. а сделал вот так Command.CommandText = "Select ["+ИмяТаблицы+"].[Part_no],["+ИмяТаблицы+"].[Service_type] from "+ИмяТаблицы; |
|||
10
fisher
17.09.13
✎
17:58
|
(9) Ну ты ленивый. Открой свой файл в акссесс, нарисуй там конструктором нужный запрос и скопируй его текст в 1С.
|
|||
11
zladenuw
17.09.13
✎
18:45
|
(10) нема акцесса. проверка должна быть. всю пиратку удалили
|
|||
12
zladenuw
17.09.13
✎
18:46
|
(10) ну так ведь 1с. по этому лень при выше всего :)
|
|||
13
zladenuw
17.09.13
✎
18:49
|
(10) вот нашел справку. и фиг там. просто описаны колонки без чего либо
http://office.microsoft.com/en-us/access-help/all-distinct-distinctrow-top-predicates-HA001231351.aspx |
|||
14
zladenuw
17.09.13
✎
18:54
|
с дома продолжу.
|
|||
15
МихаилМ
17.09.13
✎
21:20
|
не нужна справка по скл.
используйте срества ado не забывайте указать правильный тип курсора. |
|||
16
МихаилМ
17.09.13
✎
21:26
|
||||
17
zladenuw
18.09.13
✎
10:48
|
мда.
делал по примера как тут http://www.kolomna-school7-ict.narod.ru/st40501.htm . Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][Драйвер ODBC Microsoft Access] Слишком мало параметр. Требуется 1. А вообще ошибка не может быть связана с именем таблицы в Access ? |
|||
18
zladenuw
18.09.13
✎
10:50
|
(16) и так писал как тут
http://www.w3schools.com/ADO/showasp.asp?filename=demo_query_1 ошибка другая просит параметров. пишет что должно быть 2. печалько :( |
|||
19
spectre1978
18.09.13
✎
10:56
|
(0) Если речь идет о базе Access, то там можно использовать JetSQL:
UPDATE YourTable SET Art=LEFT (AccessCode, 5) + RIGHT (AccessCode, 5) |
|||
20
MKZM
18.09.13
✎
10:58
|
Напиши в аксесе все запросы, отладь их, а потом просто вызывай из 1с как хранимки.
|
|||
21
zladenuw
18.09.13
✎
11:09
|
(20) нету акцесса. и не будет. дальше какие варианты ?
|
|||
22
ДенисЧ
18.09.13
✎
11:10
|
(21) Поставь.
|
|||
23
zladenuw
18.09.13
✎
11:12
|
(22) читаем (11)
|
|||
24
spectre1978
18.09.13
✎
11:14
|
(21) база акцесс MDB (97-2003) или от последних версий акцесса?
Если MDB, то есть бесплатные приложения, которые позволяют просматривать таблицы, запускать запросы и т.д. |
|||
25
zladenuw
18.09.13
✎
11:16
|
(24) говорят что 2007.
|
|||
26
spectre1978
18.09.13
✎
11:18
|
||||
27
MKZM
18.09.13
✎
11:21
|
(23) Охринеть.
|
|||
28
spectre1978
18.09.13
✎
11:21
|
(25) +(26) вроде как умеет и их. Пробуйте.
|
|||
29
zladenuw
18.09.13
✎
11:28
|
все банально. гребанный синтаксис. брал название колонок с тз 1с. а она их сволочь поменяла. (28) да умеет. спасибо
|
|||
30
zladenuw
18.09.13
✎
11:29
|
(19) нужно не меняя акцесса. преобразовать поле.
|
|||
31
spectre1978
18.09.13
✎
13:59
|
(30) SELECT LEFT (AccessCode, 5) + RIGHT (AccessCode, 5) AS MyArt FROM MyTable
|
|||
32
zladenuw
18.09.13
✎
14:40
|
(31) спасибо. а как сделать замену символа "-" ? если он есть
|
|||
33
zladenuw
18.09.13
✎
15:14
|
нашел функцию. но мне упорно говорят что ее нет. почему ?
http://www.techonthenet.com/access/functions/string/replace.php Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][Драйвер ODBC Microsoft Access] Неопределенная функция 'Replace' в выражении. |
|||
34
spectre1978
18.09.13
✎
15:15
|
(32) Функция Replace в JetSQL есть, но она считается небезопасной, поэтому просто так ее запускать нельзя.
Посмотрите вот это: http://support.microsoft.com/default.aspx?scid=kb;en-us;294698#6 |
|||
35
spectre1978
18.09.13
✎
15:15
|
+ Вроде как если отключить режим песочницы (SandboxMode) в реестре, то работать будет.
|
|||
36
zladenuw
18.09.13
✎
15:17
|
(35) жаль :(
а вот почему SQL query You can also use the Replace function in a query. SELECT Replace([ItemDesired],'e','i') AS Expr1 FROM Orders Note You cannot test this function online. It works in Access only. |
|||
37
zladenuw
18.09.13
✎
15:22
|
а тут написано что можно использовать.
http://www.techonthenet.com/access/functions/index_alpha.php то как победить то. |
|||
38
zladenuw
18.09.13
✎
15:23
|
а можно ли вызвать свою функцию как то ?
что бы можно было передать ей параметры. или так нельзя ? |
|||
39
zladenuw
18.09.13
✎
15:26
|
типа как тут
http://stackoverflow.com/questions/748674/how-to-replace-multiple-characters-in-access-sql SuperReplace :) |
|||
40
spectre1978
18.09.13
✎
15:35
|
(39) Можно, но для создания функций вам нужен будет MS Access, коий по условиям задачи вам юзать нельзя.
|
|||
41
spectre1978
18.09.13
✎
15:37
|
+ (39) с ним можно было бы сделать и еще одну фишку годную: создать хранимый запрос (закладка "Запросы"), содержащий запрос с функцией Replace, a потом из ADO+Jet тупо его вызвать:
select * from MyQuery По-моему, так станцует. |
|||
42
zladenuw
18.09.13
✎
15:42
|
засада блин. почему тогда на некоторых источниках пишут что можно использовать Replace. а по факту ошибка, что нету такой функции
|
|||
43
spectre1978
18.09.13
✎
15:45
|
Ее (как и Nz, и некоторые другие) можно использовать в самом MS Access, но нельзя вызывать через движок Jet из приложений. Как я понял, что-то связанное с безопасностью.
Но: можно создать хранимый запрос, содержащий обращение к такой функции, и потом запрашивать данные из этого запроса в своем приложении. |
|||
44
zladenuw
18.09.13
✎
15:53
|
в топку. сделал через внешние источники данных. чтение данных меньше 1 секунды. было до 9 с gamewithfire.
буду пробовать в самом запросе 1с такое сделать. |
|||
45
zladenuw
18.09.13
✎
16:00
|
(44) да и в запросе 1с не решиться проблема стрзаменить :(. как же быть тогда. описывать что ли условие по подстроке ? длина вроде как максимум 12 символов
|
|||
46
spectre1978
18.09.13
✎
16:05
|
(43) не станцевало. Специально попробовал - на селект из запроса тоже ругается на Replace. Прискорбно.
|
|||
47
spectre1978
18.09.13
✎
21:32
|
(45) Если у вас только одно вхождение символа '-', то можно извратиться вот так:
SELECT IIF (INSTR (YourField, '-')>0, LEFT (YourField, INSTR (YourField, '-')-1) + RIGHT (YourField, LEN (YourField) - INSTR (YourField, '-')), YourField) from YourTable в данном примере строка в поле YourField будет сжата на первое встретившееся тире. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |