Ошибка использования функц. REPLACE через JET

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 04.12.2004 (Сб) 4:22

FoxPro VPF драйвер не работает с DBF (не умеет)
А посмотреть это можно в Панель управления -> Администратирование -> Администратор источников данных ODBC (если права конечно есть)

Кстати там же есть фишка PerfMon, она производительность считает и тоже может показать прогресс бар, скока времени какая операция длиться и т.п. Так что это не ф-ия Access :lol:

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 06.12.2004 (Пн) 11:34

я уже предложил вариант использования сочетаний функций IIF, INSTR,LEFT,RIGHT вместо REPLACE в запросе.

3ton
Новичок
Новичок
 
Сообщения: 48
Зарегистрирован: 07.05.2004 (Пт) 10:56
Откуда: Kaliningrad

Сообщение 3ton » 06.12.2004 (Пн) 12:16

Konst_One писал(а):я уже предложил вариант использования сочетаний функций IIF, INSTR,LEFT,RIGHT вместо REPLACE в запросе.


Интересно, как будет выглядеть строка запроса, в которой (хотя-бы) в одном поле из значения "-3 234 5689 12#123/12B" получить "323456891212312B", причем что формат кода в следующей строке может быть таким "S100 210" и перевести его надо соответственно в "S100210" :?:

Я себе даже не представляю с какой стороны начинать написание SQl строки используя, ранее указанные, функции (смысл их ес-но понятен) :?
Жить - хорошо! А хорошо жить - еще лучше!!!
Удачи! Шурик.

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 06.12.2004 (Пн) 12:26

Народ, а че, правда в Аксессе нет Replace()? :shock: Кошмар... А вот в транзакте она уже есть. Может, все-таки где-то не там ищете, или она просто не так называется?..

3ton
Новичок
Новичок
 
Сообщения: 48
Зарегистрирован: 07.05.2004 (Пт) 10:56
Откуда: Kaliningrad

Сообщение 3ton » 06.12.2004 (Пн) 12:31

Ennor писал(а):Народ, а че, правда в Аксессе нет Replace()? :shock: Кошмар...


В том то и дело, что в Аксессе Replace есть, но эта функция не работает, когда пытаешься использовать ее через ADO vs JET и даже DAO :(
Жить - хорошо! А хорошо жить - еще лучше!!!
Удачи! Шурик.

3ton
Новичок
Новичок
 
Сообщения: 48
Зарегистрирован: 07.05.2004 (Пт) 10:56
Откуда: Kaliningrad

Сообщение 3ton » 06.12.2004 (Пн) 12:36

Более того, на другом форуме мне кинули ссылку на MSDN.com, где черным по английски написано, что в целях безопасности отключено масса функций (реплэйс в их числе :cry: )
Жить - хорошо! А хорошо жить - еще лучше!!!
Удачи! Шурик.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 07.12.2004 (Вт) 12:07

Если для Акксес нада не JET.
нужно через ODBC+Microsoft Access Driver (*.mdb), тады репласе должен работать.
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

3ton
Новичок
Новичок
 
Сообщения: 48
Зарегистрирован: 07.05.2004 (Пт) 10:56
Откуда: Kaliningrad

Сообщение 3ton » 07.12.2004 (Вт) 23:54

Sebas писал(а):Если для Акксес нада не JET.


??? с какой радости ???

А по поводу ODBC+Driver Access

Код: Выделить всё
  Dim conn As New ADODB.Connection
  Dim rss As New ADODB.Recordset
  conn.ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;Extended Properties=""DBQ=C:\temp\db1.mdb;DefaultDir=C:\temp;Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;"""
  conn.Open
  Set rss = conn.Execute("select replace(code;' ';'') as fil1 from sc84")


ОШИБКА СИНТАКСИСА replace(code;' ';'')

В общем те-же яйца, но только в профиль ...
Жить - хорошо! А хорошо жить - еще лучше!!!
Удачи! Шурик.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 08.12.2004 (Ср) 7:54

Set rss = conn.Execute("select replace(code;' ';'') as fil1 from sc84")


Лучше просто:

Код: Выделить всё
rss.Open ...


ОШИБКА СИНТАКСИСА replace(code;' ';'')

И совершенно правильно пишет - нечего тупо копировать код из окна постоителя Access-a. Разделителем должна быть запятая а не точка с запятой.

Выполняй так (через ОDВС):

rss.Open "select replace(code,"" ""."""") as fil1 from sc84", conn, adOpenStatic, adLockReadOnly
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

3ton
Новичок
Новичок
 
Сообщения: 48
Зарегистрирован: 07.05.2004 (Пт) 10:56
Откуда: Kaliningrad

Сообщение 3ton » 08.12.2004 (Ср) 21:46

Andrey Fedorov писал(а):И совершенно правильно пишет - нечего тупо копировать код из окна постоителя Access-a. Разделителем должна быть запятая а не точка с запятой.

Выполняй так (через ОDВС):

rss.Open "select replace(code,"" ""."""") as fil1 from sc84", conn, adOpenStatic, adLockReadOnly


:x

Прежде, чем писать, я все проверяю, чего и Вам, уважаемый, советую.

replace(code,"" ""."""")


Так вот:

VB6 (sp6), w2k, mdac 2.8, jet4 (sp8)

Код: Выделить всё
  Dim conn As New ADODB.Connection
  Dim rss As New ADODB.Recordset
  conn.ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;Extended Properties=""DBQ=C:\temp\db1.mdb;DefaultDir=C:\temp;Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;"""
  conn.Open
  rss.Open "select replace(code,"" "","""") as fil1 from sc84", conn, adOpenStatic, adLockReadOnly


НЕОПРЕДЕЛЕННАЯ ФУНКЦИЯ 'REPLACE'
Жить - хорошо! А хорошо жить - еще лучше!!!
Удачи! Шурик.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 09.12.2004 (Чт) 8:04

Прежде, чем писать, я все проверяю, чего и Вам, уважаемый, советую.


По крайней мере тебе было указано что в качестве разделителя в функции запроса должны быть запятые а не точка с запятой - и это верно.

Да все проверять... И своя работа ведь еще есть.
Уже много лет как ушел от Access-a на SQL.
Когда-то вроде работало. Могу и ошибаться. Впрочем можешь использовать объектную модель самого Access-a, тогда точно будет работать.

В случае с телефонным номером (к примеру) - просто приводил бы его к виду без пробелов/скобок/тире еще при заполнении поля. Тогда и подобных проблем не будет.

И еще пример - мне требовалось хранить (ну и потом искать) шифры изделий в самом забавном сочетании русских и английских букв в одном слове. Тоже без проблем - однотипные буквы еще при сохранении преобразовывал в английские. В результате проблем подобных твоей просто не было. Как и необходимости применения функции в запросе.

Так что на твоем месте я бы просто привел таблицу в порядок (если оно возможно, конечно).

Ну а иначе - чтение таблички в Recordset, и пробежка по нему с заменой поля...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

3ton
Новичок
Новичок
 
Сообщения: 48
Зарегистрирован: 07.05.2004 (Пт) 10:56
Откуда: Kaliningrad

Сообщение 3ton » 16.12.2004 (Чт) 12:47

Andrey Fedorov писал(а):В случае с телефонным номером (к примеру) - просто приводил бы его к виду без пробелов/скобок/тире еще при заполнении поля. Тогда и подобных проблем не будет.
...
Так что на твоем месте я бы просто привел таблицу в порядок (если оно возможно, конечно).

Увы, таблица не моя, и права у меня есть только на чтение даных с таблицы :(

Andrey Fedorov писал(а):Ну а иначе - чтение таблички в Recordset, и пробежка по нему с заменой поля...


А вот это дело :idea: , я до этого простого решения, сам мочему-то не допер, вот только как по времени это будет выглядеть... Вобщем есть идея, а это главное. :!:
Лед тронулся, господа... :D
Жить - хорошо! А хорошо жить - еще лучше!!!
Удачи! Шурик.

snov
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 176
Зарегистрирован: 28.11.2003 (Пт) 10:12
Откуда: Челябинск

Сообщение snov » 16.12.2004 (Чт) 15:09

Leon_ прав. проверь синтаксис. у меня просто выполнение запроса:
Код: Выделить всё
select replace('asdasdasd', 'a', 'ZZ') as sss from [tblname]

вообще никаких проблем не вызвал. так что смотри свои руки. :)

3ton
Новичок
Новичок
 
Сообщения: 48
Зарегистрирован: 07.05.2004 (Пт) 10:56
Откуда: Kaliningrad

Сообщение 3ton » 16.12.2004 (Чт) 16:33

snov писал(а):Leon_ прав. проверь синтаксис. у меня просто выполнение запроса:
Код: Выделить всё
select replace('asdasdasd', 'a', 'ZZ') as sss from [tblname]

вообще никаких проблем не вызвал. так что смотри свои руки. :)


Прочитайте внимательно ВЕСЬ топик.
Речь идет об VB+ADO, а не про Акцес
Жить - хорошо! А хорошо жить - еще лучше!!!
Удачи! Шурик.

snov
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 176
Зарегистрирован: 28.11.2003 (Пт) 10:12
Откуда: Челябинск

Сообщение snov » 17.12.2004 (Пт) 12:20

3ton писал(а):Речь идет об VB+ADO, а не про Акцес

ну вот только что проверил. через ADO2.0 к MSSQL2000
Код: Выделить всё
Dim db As New ADODB.Connection
Dim rst As ADODB.Recordset
    db.Open adoOLF.ConnectionString
    Set rst = db.Execute("Select replace('asdasdasd', 'a', 'ZZ') as SSS From OLF")
    MsgBox rst![SSS]
    db.Close

Все прошло нормально. Мож я все таки что не так понял?

3ton
Новичок
Новичок
 
Сообщения: 48
Зарегистрирован: 07.05.2004 (Пт) 10:56
Откуда: Kaliningrad

Сообщение 3ton » 17.12.2004 (Пт) 15:29

snov писал(а):ну вот только что проверил. через ADO2.0 к MSSQL2000
Код: Выделить всё
Dim db As New ADODB.Connection
Dim rst As ADODB.Recordset
    db.Open adoOLF.ConnectionString

Мож я все таки что не так понял?


Фомат поставщика бд - MSSQL? А у меня

Код: Выделить всё
connDB.Provider = "Microsoft.Jet.OLEDB.4.0;"
connDB.Open "c:\db1.mdb", "admin", ""


Вот о чем речь!
Жить - хорошо! А хорошо жить - еще лучше!!!
Удачи! Шурик.

snov
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 176
Зарегистрирован: 28.11.2003 (Пт) 10:12
Откуда: Челябинск

Сообщение snov » 11.01.2005 (Вт) 11:01

Да точно! с XS не катит. дело в том что в XS (по крайней мере 97) нет функции replace

Пред.

Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 5

    TopList