Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / HTML, JavaScript, VBScript, CSS Новый топик    Ответить
 jscript: получить файл формата dbf  [new]
natalitvinenko
Member

Откуда: Донецк
Сообщений: 718
Классическая картина маслом: Office2007, надо файл Excel сохранить в dbf, а оно ж, соответственно, невозможно. Понижение версии, LibreOffice...
Почему спрашиваю тут? Нужно эти танцы автоматизировать для пользователей. Что у них может стоять- да что угодно из зоопарка Excel- может, и 2003, в котором форматировочные возможности вполне при нем. Пишу программулину на эту тему на jscripte, hta.Телодвижения происходят локально, на клиенте. Залезть запросом в Excel файл могу, создать и записать файл формата txt, используя ADODB.Stream- могу, в прошлом так XML формировала. Вопрос: можно ли при помощи этого самого ADODB.Stream получить dbf-файл? Ну или есть какие-то еще варианты? Спасибо заранее.
19 дек 18, 16:29    [21768568]     Ответить | Цитировать Сообщить модератору
 Re: jscript: получить файл формата dbf  [new]
SQLPowerUser
Member

Откуда: ссылка в профиле
Сообщений: 278
natalitvinenko
Залезть запросом в Excel файл могу
Это хорошо.
Тогда бежим по Recordset и пишем в dbf, примерно как в образце:
Dim conn, path, s
path = "d:\"
Set conn = CreateObject("ADODB.Connection")
s = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & path & ";User ID=Admin;Password=;Extended Properties=dBase IV"
conn.Open (s)
conn.Execute "create table dbftable (ID_N int, dt date, info char(100))"
conn.Execute "insert into dbftable (ID_N , dt, info) values (1, '2010/05/31', 'abcde')"
conn.Close
Set conn = Nothing
19 дек 18, 16:45    [21768596]     Ответить | Цитировать Сообщить модератору
 Re: jscript: получить файл формата dbf  [new]
SQLPowerUser
Member

Откуда: ссылка в профиле
Сообщений: 278
з.ы. Мне когда-то хорошо помогла эта статья: Использование библиотеки ADO (Microsoft ActiveX Data Object)
19 дек 18, 17:00    [21768617]     Ответить | Цитировать Сообщить модератору
 Re: jscript: получить файл формата dbf  [new]
natalitvinenko
Member

Откуда: Донецк
Сообщений: 718
SQLPowerUser
s = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & path & ";User ID=Admin;Password=;Extended Properties=dBase IV"
conn.Open (s)

Есть сразу предельно глупый вопрос: если мы пишем "Microsoft.Jet.OLEDB.4.0"- значит ли это, что у пользователя должен быть Аксес или оно и не в версии Pro присутствует? Просто заведомо исходила из того, что Акс может стоять, а может и нет, последнее более вероятно. Извиняюсь, что сразу не оговорила такого обстоятельства.
20 дек 18, 10:13    [21769199]     Ответить | Цитировать Сообщить модератору
 Re: jscript: получить файл формата dbf  [new]
SQLPowerUser
Member

Откуда: ссылка в профиле
Сообщений: 278
natalitvinenko,

Access не нужен. У меня на компьютере был установлен Word/Excel и всё работало :)
20 дек 18, 12:09    [21769331]     Ответить | Цитировать Сообщить модератору
 Re: jscript: получить файл формата dbf  [new]
vkle
Member

Откуда: Самара
Сообщений: 14527
natalitvinenko
Есть сразу предельно глупый вопрос: если мы пишем "Microsoft.Jet.OLEDB.4.0"- значит ли это, что у пользователя должен быть Аксес или оно и не в версии Pro присутствует?
По большому счету, MS Office не нужен. Достаточно наличия "в компьютере" необходимой библиотеки.
Однако, для 64-бит потребуется Microsoft.ACE.OLEDB.12.0 скорее всего.
20 дек 18, 12:31    [21769364]     Ответить | Цитировать Сообщить модератору
 Re: jscript: получить файл формата dbf  [new]
natalitvinenko
Member

Откуда: Донецк
Сообщений: 718
SQLPowerUser
natalitvinenko
Залезть запросом в Excel файл могу
Это хорошо.
Тогда бежим по Recordset и пишем в dbf, примерно как в образце:


не идет кабан в скворешник:-(
var fileURL2 = new String(window.location.pathname);
pathhhh=fileURL2;
pathhhh=pathhhh.substr(0,pathhhh.lastIndexOf("\\")+1);

var conn = new ActiveXObject("ADODB.Connection");
s = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & pathhhh & ";User ID=Admin;Password=;Extended Properties=dBASE IV";
/////s = "Provider=VFPOleDB;Data Source=" & pathhhh;
conn.Open (s);
conn.Execute("create table dbftable (ID_N int, dt date, info char(100))");
conn.Execute("insert into dbftable (ID_N , dt, info) values (1, '2010/05/31', 'abcde')");
conn.Close;

не могу, грит, источник найти. Лазила уточнить сроку подключения(https://www.connectionstrings.com/microsoft-jet-ole-db-4-0/)- вроде один в один. Только там dBASE большими буквами- думала, уже в это упирается. Не помогло.
А вот так идет как дышит
var WshShell = new ActiveXObject( 'WScript.Shell' );
var  connection = new ActiveXObject("ADODB.Connection"),recordset = new ActiveXObject("ADODB.Recordset");
 alert(pathhhh+"/"+"2003.dbf");
connection.Open("Provider=VFPOleDB;Data Source="+pathhhh+"2003.dbf");
try {

    connection.Execute("create table dbftable (ID_N int, dt date, info char(100))");
connection.Execute("insert into dbftable (ID_N , dt, info) values (1, '2010/05/31', 'abcde')");
} catch(e) {}

Файл новосозданный в папке обнаруживается, успешно открывается. Но без указания пути с конкретным файлом- не хочет. Указала ему что угодно, что в папке валяется- да пожалуйста.
То есть задача,в принципе, кривоватенько(нужно все время dbf с собой тягать), но решена. За что спасибо SQLPowerUser .
Если есть варианты, как от этого подставного избавится- было бы здорово.
20 дек 18, 14:13    [21769551]     Ответить | Цитировать Сообщить модератору
 Re: jscript: получить файл формата dbf  [new]
natalitvinenko
Member

Откуда: Донецк
Сообщений: 718
SQLPowerUser, все таки- спрошу еще. Кодировка получающегося файла dbf. Зависит только от настроек в "источниках данных" панели управления или можно как-то еще?
27 дек 18, 14:57    [21774852]     Ответить | Цитировать Сообщить модератору
 Re: jscript: получить файл формата dbf  [new]
SQLPowerUser
Member

Откуда: ссылка в профиле
Сообщений: 278
natalitvinenko,

с Новым Годом!

Сложно сказать. Я с dbf последний раз работал очень давно, и на старых системах проблем с кодировкой не было.
Посмотрите здесь, там и через реестр предлагают, и через строку подключения...
1 янв 19, 11:17    [21777308]     Ответить | Цитировать Сообщить модератору
 Re: jscript: получить файл формата dbf  [new]
natalitvinenko
Member

Откуда: Донецк
Сообщений: 718
SQLPowerUser, с кодировкой получилось двояко. С одной стороны, читала, что надо просто тупо на компе в источниках данных указать, что формат не dBASE V, а dBASE IV. У меня так было настроено, у начальницы нет- возможно, поэтому у меня программа работала, а у нее кодировала непойми шо. Настроила и ей. Во- вторых , тупо прописала в самой строке(не знала, что и так тоже можно):
connection.Open("Provider=VFPOleDB;Data Source="+pathhhh+"2003.dbf;Extended Properties=dBASE IV;charset=866;");

Пока вроде ко мне вопросов нет.
11 фев 19, 16:53    [21806649]     Ответить | Цитировать Сообщить модератору
 Re: jscript: получить файл формата dbf  [new]
natalitvinenko
Member

Откуда: Донецк
Сообщений: 718
И все-таки тему я подниму
natalitvinenko
Файл новосозданный в папке обнаруживается, успешно открывается. Но без указания пути с конкретным файлом- не хочет. Указала ему что угодно, что в папке валяется- да пожалуйста. Если есть варианты, как от этого подставного избавится- было бы здорово.


Не хочется этот подставной файл все время за собой тягать, отдавать в эксплуатацию с костылем. Ну что может быть за проблема, что не отрабатывает без указания файла, не отрабатывает только по указанию папки? Вдумчивое изучение www.connectionstrings.com не помогло...
11 фев 19, 16:57    [21806657]     Ответить | Цитировать Сообщить модератору
 Re: jscript: получить файл формата dbf  [new]
natalitvinenko
Member

Откуда: Донецк
Сообщений: 718
SQLPowerUser
natalitvinenko
Залезть запросом в Excel файл могу
Это хорошо.
Тогда бежим по Recordset и пишем в dbf, примерно как в образце:
conn.Execute "create table dbftable (ID_N int, dt date, info char(100))"
conn.Execute "insert into dbftable (ID_N , dt, info) values (1, '2010/05/31', 'abcde')"
conn.Close
Set conn = Nothing


А как вставить из Excel дату? Попытка вставить rs.fields(2).value в одинарных кавычках, в ##- успеха не имеет:-(
28 фев 19, 17:45    [21822037]     Ответить | Цитировать Сообщить модератору
 Re: jscript: получить файл формата dbf  [new]
carrotik
Member

Откуда:
Сообщений: 1379
natalitvinenko

А как вставить из Excel дату? Попытка вставить rs.fields(2).value в одинарных кавычках, в ##- успеха не имеет:-(


.. у вас же в примере написано 'YYYY/MM/DD' .. хотя по букварю должно быть без слешей, но если так вставляется, то сначала отформатируйте дату из Экселя (split, или еще как, потом конкатенацией соберите) ...
28 фев 19, 17:56    [21822045]     Ответить | Цитировать Сообщить модератору
 Re: jscript: получить файл формата dbf  [new]
natalitvinenko
Member

Откуда: Донецк
Сообщений: 718
carrotik
natalitvinenko
А как вставить из Excel дату? Попытка вставить rs.fields(2).value в одинарных кавычках, в ##- успеха не имеет:-(


.. у вас же в примере написано 'YYYY/MM/DD' .. хотя по букварю должно быть без слешей, но если так вставляется, то сначала отформатируйте дату из Экселя (split, или еще как, потом конкатенацией соберите) ...


Спрашивала потому, что так не сработало. Сама спросила- сама отвечаю. Строка вставки, -при том же объявлении поля даты про создании, как в примере, DATE_D date -будет выглядеть примерно так:
connection.Execute("insert into ["+name_dbftable+"] ( ABCOUNT,DATE_D) " +
                    "values (  ["+ rs.fields(0).value+" ] , {^"+ rs.fields(1).value+"}");

Не кавычки, а вот фигурные скобочки плюс крышечка:-) спереди.
1 мар 19, 09:53    [21822430]     Ответить | Цитировать Сообщить модератору
 Re: jscript: получить файл формата dbf  [new]
natalitvinenko
Member

Откуда: Донецк
Сообщений: 718
Продолжаю отвечать на свои же вопросы :-) Вдруг какого горемыку занесет с теми же проблемами. Про подключении к DBF без некоего вспомогательно файла, который там должен заведомо быть, указывая источником данных просто папку. Вот так подключается:
connection.Open( "Provider=VFPOLEDB.1;Mode=ReadWrite;Data Type=DBF;Extended Properties=dBASE IV;Collating Sequence=RUSSIAN;CODEPAGE=866;DELETED=False;Data Source=" + pathhhh + "\\");

В принципе- версия на тему, таких примеров попадается много. Почему у меня не шло? Уже не вспомню. Наверное, совершила важную ошибку- забыла, что / - это символ экранирования. Когда при отладке поставила один и мне программа упорно начал ругаться на отсутсвие последней двойной кавычки- вот тогда я, кажется, эту затею и бросила. Когда в примере появились две- все заработало.
1 мар 19, 09:59    [21822438]     Ответить | Цитировать Сообщить модератору
 Re: jscript: получить файл формата dbf  [new]
carrotik
Member

Откуда:
Сообщений: 1379
natalitvinenko,

..не, ну через драйвер ФоксПро и дурак сможет .. :) .. если он есть ..
1 мар 19, 11:39    [21822531]     Ответить | Цитировать Сообщить модератору
 Re: jscript: получить файл формата dbf  [new]
natalitvinenko
Member

Откуда: Донецк
Сообщений: 718
И снова здравствуйте.
Заголовки.
Созданный dbf файл одни программы открывают без проблем, а тот же Excel2010 не понимает. Заказчик говорит- файл битый. Как это может быть, чтобы получался битый файл? Перед закрытием коннекта что-то дописывать надо? Может, это из-за фокспрошного драйвера? Что- искусственно считать строки и писать в заголовок? никогда этого не делала...
Начальство говорит- не морочь голову, бери файл образец и вставляй в него. Так не вставляет! Виснет на нем, присоединяется, но даже самый простенький insert- дулю. Более того, уже беру свой файл, хочу к нему дописать - дулю. Если вот тут создала таблицу, в нее пишет, берем уже готовую- никак.
var WshShell = new ActiveXObject( 'WScript.Shell' );
var  connection = new ActiveXObject("ADODB.Connection"),recordset = new ActiveXObject("ADODB.Recordset");
try {
connection.Open( "Provider=VFPOLEDB.1;Mode=ReadWrite;Data Type=DBF;Extended Properties=dBASE IV;charset=866;DELETED=True;Data Source=" + pathhhh + "/"+"Макет.dbf");
 //alert("Присоединились");
}catch(e) {alert("Тупо не подсоединяюсь");
        //self.close();
        };

 /// залить туда из Excel
///////////////////////////////////////////////////////////////
	
        if(!rs.bof)
        {
            rs.MoveFirst()
            while(!rs.eof)
            {
               
                try { 
		//connection.Execute("insert into [" + pathhhh + "Макет.dbf] (CODE_FIRME, ABCOUNT) " +
                //    "values ( 10021, 1 )");
		//alert(pathhhh + "4_532019.DBF");
		connection.Execute("insert into " + pathhhh +  "4_532019.DBF (CODE_FIRME, ABCOUNT) " +
                    "values ( 10021, 1 )");

            
		 //alert("Присоединились");
		}catch(e) {//alert("Не вставляю");
		};
		
                rs.MoveNext()
            }
                
        }
        rs.Close();
        
               
    }catch(e) {//alert("Что-то пошло не так....");
        //self.close();
        };
connection.Close();

Если не закомментировано, вылетает сообщение "не вставляю"
Как я уже задолбалась делать простые и тупые ошибки. Наверняка какая- то фигня не пашет.
5 мар 19, 16:55    [21825591]     Ответить | Цитировать Сообщить модератору
 Re: jscript: получить файл формата dbf  [new]
Изопропил
Member

Откуда:
Сообщений: 31001
просто создать dbf файл без adodb,jet,foxpro и прочей ереси?
5 мар 19, 17:57    [21825655]     Ответить | Цитировать Сообщить модератору
 Re: jscript: получить файл формата dbf  [new]
carrotik
Member

Откуда:
Сообщений: 1379
OpenOffice, кстати, может, да ...
5 мар 19, 18:35    [21825681]     Ответить | Цитировать Сообщить модератору
 Re: jscript: получить файл формата dbf  [new]
natalitvinenko
Member

Откуда: Донецк
Сообщений: 718
carrotik,для этого OpenOffice надо поставить на каждую машину, причем именно той версии , какая надо. Не вариант от слова совсем.
6 мар 19, 09:23    [21825919]     Ответить | Цитировать Сообщить модератору
 Re: jscript: получить файл формата dbf  [new]
carrotik
Member

Откуда:
Сообщений: 1379
natalitvinenko
carrotik,для этого OpenOffice надо поставить на каждую машину, причем именно той версии , какая надо. Не вариант от слова совсем.


.. я не совсем понимаю вашей задачи .. какой заказчик требует именно DBF-формат? .. банк? .. почему давно нельзя было согласовать другой формат (XML например) ...? .. это не к вам претензии нисколько .. просто - не понятно ..
6 мар 19, 11:15    [21826014]     Ответить | Цитировать Сообщить модератору
Все форумы / HTML, JavaScript, VBScript, CSS Ответить