|   |   | 
| 
 | как в запросе АДО сделать некие действие со строкой в таблице | ☑ | ||
|---|---|---|---|---|
| 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 будет сжата на первое встретившееся тире. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |