Имя: Пароль:
1C
1С v8
как в запросе АДО сделать некие действие со строкой в таблице
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
+(15)
вот нашлась справка по адо

http://www.w3schools.com/ADO/ado_update.asp
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
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 будет сжата на первое встретившееся тире.