powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как сделать стандартную замену в конкретном поле таблицы БД mdb.
15 сообщений из 15, страница 1 из 1
Как сделать стандартную замену в конкретном поле таблицы БД mdb.
    #38665838
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БД Access
Таблица MyTable
Поле MyFilePath

Я ранее писал относительный путь,т.е
pictures\7DE42132E20EA1C8C8.jpg
pictures\7DE42132E211283433.jpg

В "новой версии программы" путь пишется полностью(в общем случае я убрал привязку к жесткому пути) :
C:\Documents and Settings\All Users\Application Data\MyProga\pictures\7DE42132E20EA1C8C8.jpg
C:\Documents and Settings\All Users\Application Data\MyProga\pictures\7DE42132E211283433.jpg

В структуре базы ничего не менялось,
но хочу сделать апгрейд записей при апгрейде версии программы, а то "новая версия" у меня не видит обкоцанных путей.

Как сделать стандартную замену для всех записей в столбце таблицы?

Ну по идее
1) Проверить что начинается с pictures\
2) Если да, то дописать C:\Documents and Settings\All Users\Application Data\MyProga\

Желательно через
adoConn.Execute ("UPDATE ...? -как то в этом духе.

Мне просто это все не очень интересно, хотелось бы просто сделать побыстрее и забить, занимался этим всем давно.
Рассчитываю что подскажут быстрее чем сам допру.
...
Рейтинг: 0 / 0
Как сделать стандартную замену в конкретном поле таблицы БД mdb.
    #38665852
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
update mytable set myfilepath='c:\documents...' + myfilepath where myfilepath like 'pictures%'
...
Рейтинг: 0 / 0
Как сделать стандартную замену в конкретном поле таблицы БД mdb.
    #38665859
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy, только, если не ошибаюсь, надо вместо "%" символ "*" ставить
...
Рейтинг: 0 / 0
Как сделать стандартную замену в конкретном поле таблицы БД mdb.
    #38665864
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может быть, давно я аксом не пользовался
...
Рейтинг: 0 / 0
Как сделать стандартную замену в конкретном поле таблицы БД mdb.
    #38665879
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

Спасибо, выручил.
А то я уж было намылился рекордсеты перебирать и пребывал в унынии глубоком тупо соображая с какими флагами их открывать.

Код грубо такой получился:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Private Sub CommandUpdateDB_Click()
  Dim path_AppData As String
  path_AppData = GetCommonAppDataPath & "\MyProga"
  
  DataBaseConnect
  
  'outbox
  adoConn.BeginTrans
  adoConn.Execute ("UPDATE outbox SET my_file='" _
   & path_AppData & "\' + my_file WHERE my_file LIKE 'outbox\%'")
  adoConn.CommitTrans
  
  'inbox
  adoConn.BeginTrans
  adoConn.Execute ("UPDATE inbox SET my_file='" _
   & path_AppData & "\' + my_file WHERE my_file LIKE 'inbox\%'")
  adoConn.CommitTrans
  
  DataBaseDisConnect
End Sub



HandKotAntonariy, только, если не ошибаюсь, надо вместо "%" символ "*" ставить
Я поставил % - все сработало. В кодах 3-4 летней давности проверил - тоже в LIKE использую процент, нареканий в связи с этим не было.

Antonariyможет быть, давно я аксом не пользовался
Программа Access близко не использует, строго вот эту строчку на любых ОС для коннекта:
Код: vbnet
1.
2.
  adoConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
   App.Path & "\mydatabase.mdb;Mode=Share Deny None;Persist Security Info=False;Jet OLEDB:Database Password=mypassword"


Access 2000 я использую исключительно на моем developer компьютере для первоначального опытного конструирования базы и визуальной проверки чего получилось.

Есть мелкие вопросы.
При работе я активно пользуюсь:
Код: vbnet
1.
2.
 adoConn.BeginTrans
 adoConn.CommitTrans

Здесь выкинуть или оставить? Или хотя бы обрамить одним блоком оба UPDATE?
А также частенько использую
Код: vbnet
1.
  my_JRO.RefreshCache adoConn


Добавить? Полагаю что не надо.

Но при работе у меня очень интенсивная динамика (миллисекунды играют роль) работы С БД.
А здесь надо просто запустить exe-апдейтер, открыть базу, выполнить код (так как я его написал) закрыть базу и закрыть апдейтер.
...
Рейтинг: 0 / 0
Как сделать стандартную замену в конкретном поле таблицы БД mdb.
    #38665966
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообще, один запрос или апдейт и так выплняется атомарно, а аксесс вроде бы вообще не поддерживает транзакции. можно выкинуть.
...
Рейтинг: 0 / 0
Как сделать стандартную замену в конкретном поле таблицы БД mdb.
    #38665968
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Программа Access близко не используетбазу-то использует.
...
Рейтинг: 0 / 0
Как сделать стандартную замену в конкретном поле таблицы БД mdb.
    #38666036
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariyвообще, один запрос или апдейт и так выплняется атомарно, а аксесс вроде бы вообще не поддерживает транзакции. можно выкинуть.
Судя по например вот этой статье:
How To Speed Up Data Access by Using BeginTrans & CommitTrans
как раз поддерживает и с большой пользой для себя.
И я так думаю не случайно это стал использовать.
А оставлю как нарисовал 2 блока, хуже то точно не будет.

Вот JRO.RefreshCash судя по всему здесь не нужен, я ведь не запрашиваю те же самые данные заново в рамках своей единственной в этом контексте процедуры.

Я так понимаю транзакция нужна чтоб записать в базу "как только так сразу" (out-буфер).
А JRO.RefreshCash чтоб прочитать самые свежие данные-обновить их непосредственно перед чтением (in-буфер).

AntonariyДмитрий77Программа Access близко не используетбазу-то использует.
В программе база создается при инсталляции без участия Access-а.
Речь идет об mdb (строку коннекта я привел) а не об MSAccess форматы баз которого гуляют от версии к версии.
...
Рейтинг: 0 / 0
Как сделать стандартную замену в конкретном поле таблицы БД mdb.
    #38666218
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77В программе база создается при инсталляции без участия Access-а.какая разница? база-то аксессовская, а не какая-то еще.
...
Рейтинг: 0 / 0
Как сделать стандартную замену в конкретном поле таблицы БД mdb.
    #38666236
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,
ну с этим вроде все ясно, здесь думаю проблем уже не будет.

Ты б мне лучше в сурьезных вещах чего умное подсказал.
...
Рейтинг: 0 / 0
Как сделать стандартную замену в конкретном поле таблицы БД mdb.
    #38674765
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy
Код: sql
1.
update mytable set myfilepath='c:\documents...' + myfilepath where myfilepath like 'pictures%'



А если у меня в базе
C:\Documents and Settings\All Users\Application Data\MyProga \pictures\7DE42132E20EA1C8C8.jpg
C:\Documents and Settings\All Users\Application Data\MyProga \pictures\7DE42132E211283433.jpg

а при переносе на другую систему мне надо сделать

H:\ProgramData\MyProga \pictures\7DE42132E20EA1C8C8.jpg
H:\ProgramData\MyProga \pictures\7DE42132E211283433.jpg

Т.е. условие выбора понятно:
where myfilepath like ' %pictures\% '

А то чего соответствует первому % -либо пусто, либо - любая строка - ее надо убрать и заменить на заданную, т.е.
update mytable set myfilepath=H:\ProgramData\MyProga\' + <то что начинается с pictures\> where myfilepath like ' %pictures\% '
==================================
Или например более общий случай:
У меня в базе
<любой путь кот. может вообще не быть\> 7DE42132E20EA1C8C8.jpg
<любой другой путь кот. может вообще не быть\> 7DE42132E211283433.jpg

а при переносе на другую систему мне надо сделать

H:\ProgramData\MyProga\pictures\7DE42132E20EA1C8C8.jpg
H:\ProgramData\MyProga\pictures\7DE42132E211283433.jpg

Т.е.
1) Условие выбора: -любая строчка где поле не пустое (не "" и не NULL)
2) Замена: <New fix path\> + только имя файла(справа от правого \ если есть)

=======================================
P.S пока мне нужен только вариант where myfilepath like '[b]%pictures\% c дописыванием NewPath перед pictures\% (но обрубить лишнее начало надо если оно есть)
...
Рейтинг: 0 / 0
Как сделать стандартную замену в конкретном поле таблицы БД mdb.
    #38674811
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77А если у меня в базе
C:\Documents and Settings\All Users\Application Data\MyProga \pictures\7DE42132E20EA1C8C8.jpg
C:\Documents and Settings\All Users\Application Data\MyProga \pictures\7DE42132E211283433.jpg

а при переносе на другую систему мне надо сделать

H:\ProgramData\MyProga \pictures\7DE42132E20EA1C8C8.jpg
H:\ProgramData\MyProga \pictures\7DE42132E211283433.jpg

Почитал первое что нашел:
12.5 String Functions

Родил вот такое:
Код: vbnet
1.
2.
  adoConn.Execute ("UPDATE outbox SET my_file='" _
   & Trim(Me.TextPrefix) & "\' + RIGHT(my_file, LEN(my_file)-INSTR(my_file, 'outbox\')+1) WHERE my_file LIKE '%outbox\%'")


Вроде фурычит.

Про LEN вместо CHAR_LENGTH() или LENGTH() , которые ругались вычитал поиском - видимо это mdb-приблуда
SUBSTRING FROM INSTR() не заработала.

На второй общий вариант пока мне не надо - забью.
...
Рейтинг: 0 / 0
Как сделать стандартную замену в конкретном поле таблицы БД mdb.
    #38674848
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий77,
в VBA есть ещё строковых функций
InStrRev (string, strWhatFind)
Mid (string, intFrom, intCount).
Код: vbnet
1.
2.
3.
4.
5.
s="H:\ProgramData\MyProga\pictures\7DE42132E20EA1C8C8.jpg": ?MID(s, INSTRREV(s,"\")+1)
7DE42132E20EA1C8C8.jpg

s="7DE42132E20EA1C8C8.jpg": ?MID(s, INSTRREV(s,"\")+1)
7DE42132E20EA1C8C8.jpg

По-идее должно и в Jet отработать.
...
Рейтинг: 0 / 0
Как сделать стандартную замену в конкретном поле таблицы БД mdb.
    #38674909
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,
тут подумал, если не брать "общий случай" и пути одинаковые, то можно просто написать

есть
автор
Код: plaintext
1.
C:\Documents and Settings\All Users\Application Data\MyProga\pictures\7DE42132E20EA1C8C8.jpg
C:\Documents and Settings\All Users\Application Data\MyProga\pictures\7DE42132E211283433.jpg
а при переносе на другую систему мне надо сделать
H:\ProgramData\MyProga\pictures\7DE42132E20EA1C8C8.jpg
H:\ProgramData\MyProga\pictures\7DE42132E211283433.jpg

Код: sql
1.
update table set Mypath = Replace(Mypath, "C:\Documents and Settings\All Users\Application Data\", "H:\ProgramData")
...
Рейтинг: 0 / 0
Как сделать стандартную замену в конкретном поле таблицы БД mdb.
    #38674965
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HandKotДмитрий77,
тут подумал, если не брать "общий случай" и пути одинаковые, то можно просто написать
Код: sql
1.
update table set Mypath = Replace(Mypath, "C:\Documents and Settings\All Users\Application Data\", "H:\ProgramData")



Низя.
потому что при переносе XP ->(вистообразные):
Код: vbnet
1.
update table set Mypath = Replace(Mypath, "C:\Documents and Settings\All Users\Application Data\", "H:\ProgramData")

а при переносе (вистообразные) -> XP
Код: vbnet
1.
update table set Mypath = Replace(Mypath, "H:\ProgramData", "C:\Documents and Settings\All Users\Application Data\")



Да и диск установки OS C:\ D:\ заранее не известен.

В необщем случае известно, что файлы хранятся в стандартном месте
{CommonAppData}\Proga\Pictures\
Единственное, к чему я могу привязываться это %Pictures\% , т.е. папка Pictures\ -зарезервированное имя.

А в общем случае я допускаю, чтоб юзер мог менять "место папки" (и ее имя) на любое.
Но в сторону "общего случая" пока сделаны только предварительные шаги и настройки "скрыты", там еще нужно допродумывать логику, поэтому пока черт с ним с общим.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как сделать стандартную замену в конкретном поле таблицы БД mdb.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]