powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Microsoft.Jet запрос к текстовому файлу. Имя файла содержит точку.
6 сообщений из 6, страница 1 из 1
Microsoft.Jet запрос к текстовому файлу. Имя файла содержит точку.
    #37412678
Stupid_BOT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброй ночи.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
' пробовал в VBA, VBScript, VB 6.0
Dim sq$, scn$, stmpdir$, sfile$, rs

Set rs = CreateObject("adodb.recordset")

scn = "Provider=Microsoft.Jet.OLEDB.4.0;Mode=Read;" _
    & "Extended Properties='text;Delimited=(;);HDR=YES';" _
    & "Data Source="
stmpdir = "E:\VB6prj\DFPRV_\gabage\SAVE_\"

sfile = "Укр. _нститут автобусотролейбусобудування.txt" '45
'           ^ злосчастная точка

sq = "select * from [" & sfile & "]"

rs.Open sq, scn & stmpdir,  3 ,  3 ,  1 
MsgBox rs.getstring(,  32 ), , sfile

rs.Close
Set rs = Nothing
На выделенной строке получаю
Код: plaintext
1.
2.
3.
Run-time error '-2147217865 (80040e37)':

Объект 'Укр. _нститут автобусотролейбусобудування.txt' не найден ядром базы данных Microsoft Jet.  
Проверьте существование объекта и правильность имени и пути.

Файл в указанном месте существует. Более того, если убрать злосчастную точку из имени, то подключается нормально.

Есть ли способ подключиться к этому файлу не меняя его имени ?

---------------------------------
Зри в корень! (с) Козьма Прутков
...
Рейтинг: 0 / 0
Microsoft.Jet запрос к текстовому файлу. Имя файла содержит точку.
    #37412692
kuklp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stupid_BOT, возмжно излишне резко, но наболело. Мягкие бездумно включают возможности, к-рые только усложняют жизнь. Так длинные имена файлов привели к тому, что глупые зусулы пытаются в имя запихнуть "Война и Мир" Л.Н. Толтой В формате 8.3 таких проблем не было. В табличном процессоре даже 16000 строк неоправдано много. Это уже не таблица! Не, теперь лимон строк. Зачем? Тем же зусулам невдомек, что такие объемы прерогатива СУБД. И несет их по всем форумам с криками "Хелп!", "СОС!". Чтоб не злить модеров, приложу функцию обработки строк.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Function Replace_symbols(ByVal txt As String) As String
    Dim st$, i&
    st = "<>?[]*|.'"""
    For i =  1  To Len(st$)
        txt = Replace(txt, Mid(st$, i,  1 ), "_")
    Next
    Replace_symbols = txt
End Function

С ее помощью легко изменить имя файла на корректное.
...
Рейтинг: 0 / 0
Microsoft.Jet запрос к текстовому файлу. Имя файла содержит точку.
    #37412697
Stupid_BOT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kuklp...С ее помощью легко изменить имя файла на корректное.
В строке для замены символов лишних. Шесть штук.

Stupid_BOTБолее того, если убрать злосчастную точку из имени, то подключается нормально.

Есть ли способ подключиться к этому файлу не меняя его имени ?Переимнование файла не интересует.

Эт я и сам могу. Мне бы пое%стись... (с)
...
Рейтинг: 0 / 0
Microsoft.Jet запрос к текстовому файлу. Имя файла содержит точку.
    #37412701
kuklp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stupid_BOT, возможно и есть. Так я борол пробелы в пути, нек-рые программы, например винрар, не хотят с пробелами воспринимать путь:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Public Function SpacesName(Ln As String) As String
    Dim a, i As Byte
    a = Split(Ln, "\")
    For i = LBound(a) To UBound(a)
        If InStr( 1 , a(i), " ") >  0  Then a(i) = """" & a(i) & """"
    Next
    SpacesName = Join(a, "\")
End Function

Хотя, я же не писал, что нужно преименовать оригинальный файл, достаточно скопировать его в Ваш Темп с нормальным именем и обработав, грохнуть. Все довольны.
П.С. Если в ответе прочитаю, что проблема не в пробелах а в точке - уйду из темы. Предполагаю, что общаюсь с людьми мыслящими. За готовыми решениями к фрилансерам.
...
Рейтинг: 0 / 0
Microsoft.Jet запрос к текстовому файлу. Имя файла содержит точку.
    #37412710
Stupid_BOT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kuklp,
авторнек-рые программы, например винрар, не хотят с пробелами воспринимать путьЭто Вас кто-то обманул. Пути, (содержащие пробелы), заключаете в кавычки и будет Вам счастье.

авторП.С. Если в ответе прочитаю, что проблема не в пробелах а в точкеПозволю себе процитировать себя же:

авторФайл в указанном месте существует. Более того, если убрать злосчастную точку из имени, то подключается нормально .Ни одного слова про злосчастные пробелы, длинные имена, etc

Проблема действительно в точке :-)
Помогло, в который раз, использование короткого имени файла
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
Option Explicit

Private Declare Function GetShortPathName& _
    Lib "kernel32.dll" Alias "GetShortPathNameA" ( _
    ByVal lpszLongPath$, _
    ByVal lpszShortPath$, _
    ByVal cchBuffer&)

' ===============================================
Sub fff()
Dim sq$, scn$, stmpdir$, sfile$, rs
Dim sfilelng$

Set rs = CreateObject("adodb.recordset")

scn = "Provider=Microsoft.Jet.OLEDB.4.0;Mode=Read;" _
    & "Extended Properties='text;Delimited=(;);HDR=YES';" _
    & "Data Source="
stmpdir = "E:\VB6prj\DFPRV_\gabage\SAVE_\"

sfile = "Укр. _нститут автобусотролейбусобудування.txt" '45
'           ^ злосчастная точка

'"про всяк выпадок" проверил, как поведёт себя, если в имени только латинница
'полёт нормальный
'sfile = "U.BCD.txt"
                    
Call WinAPI_GetShortPathName(stmpdir & sfile, sfile)
sfile = RTrim(Mid(sfile, InStrRev(sfile, "\") +  1 )) 'всего лишь выделяем имя фала из полного имени

sq = "select * from [" & sfile & "]"

rs.Open sq, scn & stmpdir,  3 ,  3 ,  1 
MsgBox rs.getstring(,  32 ), , sfile

rs.Close
Set rs = Nothing
End Sub

' ===============================================
Private Sub WinAPI_GetShortPathName(sLongName$, sShortName$)
    Const lMaxPath& =  255 
    Dim k&
    sShortName = Space(lMaxPath)
    Call GetShortPathName(sLongName, sShortName, lMaxPath)
    k = InStr( 1 , sShortName, Chr( 0 ))
    If k Then sShortName = Left(sShortName, k -  1 )
End Sub
...
Рейтинг: 0 / 0
Microsoft.Jet запрос к текстовому файлу. Имя файла содержит точку.
    #37412712
kuklp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stupid_BOTkuklp,
авторнек-рые программы, например винрар, не хотят с пробелами воспринимать путьЭто Вас кто-то обманул. Пути, (содержащие пробелы), заключаете в кавычки и будет Вам счастье.
Это Вы невнимательны:-) SpacesName как раз и расставляет кавычки там, где есть пробелы. Но то, что Вы решили проблему - радует. Чет сегодня на форумах ну совсем уж неумехи попадались. Хоть один мозг не для виду тягает с собой:-) Удачи!
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Microsoft.Jet запрос к текстовому файлу. Имя файла содержит точку.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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