powered by simpleCommunicator - 2.0.19     © 2024 Programmizd 02
Map
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Заменить начало строки во всех записях таблицы БД "Access" в определенном поле
9 сообщений из 9, страница 1 из 1
Заменить начало строки во всех записях таблицы БД "Access" в определенном поле
    #40117624
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем есть БД аля MSAccess
Код: vbnet
1.
2.
3.
4.
    Try : adoConn = CreateObject("ADODB.Connection") : Catch : End Try 'New ADODB.Connection
    Try
      adoConn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
...


Есть там в таблице назовем её 'outbox' поле назовем его 'file'

Когда-то пути к файлам писались относительные
fileout\4427B38D.tif
fileout\7DF71D92E361ECCECC.tif

Потом (лет 7 назад) понадобилось заменить на абсолютные вида

C:\ProgramData\My Proga\fileout\4427B38D.tif
C:\ProgramData\My Proga\fileout\7DF71D92E361ECCECC.tif

Справился тогда так (path_AppData = "C:\ProgramData\My Proga"):
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
   Try
      'outbox
      adoConn.BeginTrans()
      adoConn.Execute("UPDATE outbox SET file='" _
       & path_AppData & "\' + file WHERE file  LIKE 'fileout\%'")
      adoConn.CommitTrans()
...
    Catch
    End Try



Сейчас при апгрейде до новой версии надо проапгрейдить это поле (имя папки данных программы меняется)
Т.е. переношу БД, муваю папку с файлами в новое место,
но надо стандартно поменять пути в самой БД к виду

C:\ProgramData\My Proga New Name\fileout\4427B38D.tif
C:\ProgramData\My Proga New Name\fileout\7DF71D92E361ECCECC.tif

Т.е. надо произвести замену в начале каждой строки
path_old_AppData= C:\ProgramData\My Proga\
на
path_new_AppData= C:\ProgramData\My Proga New Name\

Очень давно этими SQL запросами не занимался, тупеем(С)
м.б. кто сможет подсказать по быстрому чтоб мозг не рушить.
...
Рейтинг: 0 / 0
Заменить начало строки во всех записях таблицы БД "Access" в определенном поле
    #40117626
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
update <table> set field = REPLACE(field, from, to)
ну или логику обновления по умнее, стоит проверить, что строка начинается с заданной, обрезать её и вставить новую
...
Рейтинг: 0 / 0
Заменить начало строки во всех записях таблицы БД "Access" в определенном поле
    #40117630
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes
update <table> set field = REPLACE(field, from, to)
ну или логику обновления по умнее, стоит проверить, что строка начинается с заданной, обрезать её и вставить новую


Мне ну если дотошно, то надо
WHERE file LIKE path_old_AppData + 'fileout\%'"
то заменить path_old_AppData на path_new_AppData

Записи стандартные path_old_AppData + жесткое имя подпапки fileout + имя файла с расширением

Ну в принципе и ваш вариант REPLACE(field, from, to) без доп. проверок вполне пойдет
path_AppData = IO.Path.Combine(GetFolderPath(SpecialFolder.CommonApplicationData), "My Proga Name")
если конечно эта конструкция работает с этим типом БД, которая вообще говоря не Access а делается таким кодом
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
    ' Create the new database.
    Try : adoxCat = CreateObject("ADOX.Catalog") 'New ADOX.Catalog
    Catch : Exit Sub : End Try
    Try
      adoxCat.Create( _
       "Provider=Microsoft.Jet.OLEDB.4.0;" & _
       "Data Source=" & IO.Path.Combine(path_AppData, "log\<bdname>.mdb") & ";Jet OLEDB:Database Password=<password>")
    Catch


Процедура разовая,
решился наконец разделить большой проект "2 в 1" на два независимых, отсюда "My Proga New Name",
но надо б юзерам дать возможность автоматически перенести данные при апгрейде.

Ну я понял, надо пробовать, идея с REPLACE понятна
...
Рейтинг: 0 / 0
Заменить начало строки во всех записях таблицы БД "Access" в определенном поле
    #40117920
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
UPDATE outbox SET file=REPLACE(file, 'C:\ProgramData\My Proga', 'C:\ProgramData\My Proga New Name') WHERE file LIKE 'C:\ProgramData\My Proga'\fileout\%'

Первый этап обработки исключения типа "System.Runtime.InteropServices.COMException" в Microsoft.VisualBasic.dll
Код: vbnet
1.
-2147217900: Неопределенная функция 'REPLACE' в выражении.



Undefined function replace

The Jet Database Engine doesn't support some of the functions you can use in Access, one of them is the Replace function.Unfortunatly, their is no alternative available, so the only option is do the replace in C# (or VB) code.

Не мой ли случай? И че делать?
Трехэтажный код с извлечением каждой строки и запихиванием обратно?
Неохота в это все врубаться.

Еще логический вариант убрать первые N символов (длина 'C:\ProgramData\My Proga' считается и добавить 'C:\ProgramData\My Proga New Name' к остатку).

Но хотелось бы через один запрос по любому без "do the replace in C# (or VB) code".
...
Рейтинг: 0 / 0
Заменить начало строки во всех записях таблицы БД "Access" в определенном поле
    #40117939
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Осилил:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    Try
      'outbox
      adoConn.BeginTrans()
      adoConn.Execute("UPDATE outbox SET file='" _
       & path_AppData & "' + RIGHT(file, LEN(file) - " & CStr(Strings.Len(path_AppData_old)) _
       & ") WHERE file LIKE '" & path_AppData_old & "%'")
      adoConn.CommitTrans()
...
    Catch
    End Try
...
Рейтинг: 0 / 0
Заменить начало строки во всех записях таблицы БД "Access" в определенном поле
    #40117987
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77
В общем есть БД аля MSAccess
Код: vbnet
1.
2.
3.
4.
    Try : adoConn = CreateObject("ADODB.Connection") : Catch : End Try 'New ADODB.Connection
    Try
      adoConn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
...


Есть там в таблице назовем её 'outbox' поле назовем его 'file'

Когда-то пути к файлам писались относительные
fileout\4427B38D.tif
fileout\7DF71D92E361ECCECC.tif

Потом (лет 7 назад) понадобилось заменить на абсолютные вида

C:\ProgramData\My Proga\fileout\4427B38D.tif
C:\ProgramData\My Proga\fileout\7DF71D92E361ECCECC.tif

Справился тогда так (path_AppData = "C:\ProgramData\My Proga"):
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
   Try
      'outbox
      adoConn.BeginTrans()
      adoConn.Execute("UPDATE outbox SET file='" _
       & path_AppData & "\' + file WHERE file  LIKE 'fileout\%'")
      adoConn.CommitTrans()
...
    Catch
    End Try



Сейчас при апгрейде до новой версии надо проапгрейдить это поле (имя папки данных программы меняется)
Т.е. переношу БД, муваю папку с файлами в новое место,
но надо стандартно поменять пути в самой БД к виду

C:\ProgramData\My Proga New Name\fileout\4427B38D.tif
C:\ProgramData\My Proga New Name\fileout\7DF71D92E361ECCECC.tif

Т.е. надо произвести замену в начале каждой строки
path_old_AppData= C:\ProgramData\My Proga\
на
path_new_AppData= C:\ProgramData\My Proga New Name\

Очень давно этими SQL запросами не занимался, тупеем(С)
м.б. кто сможет подсказать по быстрому чтоб мозг не рушить.


вам бы сделать доплнительную таблицу, вписать туда путь иди пути, заменить везде путь на параметр, и потом (через очередные 17 лет) менять в одно м месте - быстро и без проблем.
...
Рейтинг: 0 / 0
Заменить начало строки во всех записях таблицы БД "Access" в определенном поле
    #40118210
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

Откуда ж я знаю что мне через 17 лет понадобится.
Но за попытку помочь спасибо.
Система с этой базой работает без нареканий 10+ лет, забыл про нее, но вот понадобился маленький change.
Справился и ладно.
Нет уж того программирования в этом мире, сам у себя копипастю мышкой потихоньку, вот и все развитие.
На форумах уж почти никого нет.
...
Рейтинг: 0 / 0
Заменить начало строки во всех записях таблицы БД "Access" в определенном поле
    #40118251
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

используй ado.net
...
Рейтинг: 0 / 0
Заменить начало строки во всех записях таблицы БД "Access" в определенном поле
    #40118292
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pation
Дмитрий77,

используй ado.net


Честно когда-то пытался, поспотыкался и забил, например:
Эквивалент JRO.RefreshCache adoConn при переходе ADODB.Connection->OleDb.OleDbConnection

Мне надо чтоб работало, оно работает.
Я задал простой вопрос, простой ответ получен.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Заменить начало строки во всех записях таблицы БД "Access" в определенном поле
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (0):
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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