powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / dBase из apache = 1022 [Драйвер ODBC dBase] Дисковая или сетевая ошибка.
2 сообщений из 2, страница 1 из 1
dBase из apache = 1022 [Драйвер ODBC dBase] Дисковая или сетевая ошибка.
    #39354632
alexander.lunev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, товарищи!
Есть Windows 2003 сервер, на нём работает старая программа, использующая БД в DBF файлах, и есть нужда кое-что сделать в БД. Различные скрипты, запускаемые из командной строки с этой БД работают одинаково хорошо что через модуль Win32::ODBC, что через DBI::ODBC, но будущи запущены из-под локального apache (XAMPP, работает под моим же пользователем), выдают ошибку:

Код: plaintext
ERROR ODBC: [-1022] [] "[Microsoft][Драйвер ODBC dBase] Дисковая или сетевая ошибка."

если используется перловый модуль DBD::ODBC:

Код: plaintext
ERROR ODBC: [Microsoft][Драйвер ODBC dBase] Дисковая или сетевая ошибка. (SQL-HY000)

А если запускаю из командной строки, то всё нормально:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
w:\xampp\htdocs>errors.pl
2009-02-27
2005-01-01
2010-01-20
2008-10-01
2012-09-28
2016-08-30
2010-06-18
2010-05-18
2010-03-01
2009-12-23
2010-02-14

сам код, которым я это делаю:

Код: php
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.
my $DSN = "EXDSN";
my $Dir = "e:/db/";
my $Driver = "Microsoft dBase Driver (*.dbf)";
if (!Win32::ODBC::ConfigDSN(ODBC_ADD_SYS_DSN,
$Driver,
"DSN=$DSN",
"Description=DSN",
"DBQ=$Dir",
"DEFAULTDIR=$Dir",
"UID=" )) {
	die "ERROR ODBC: Can't config Win32::ODBC : ".Win32::ODBC::Error();
}
if ($odbctype eq "DBI") {
	my $EXDSN = "driver=$Driver;dbq=$Dir;defaultdir=$Dir";
	$db = DBI->connect("dbi:ODBC:$EXDSN","","" );
	die "ERROR ODBC: ". wenc(scalar $DBI::errstr) ."\n" if not $db;
}

if ($odbctype eq "WIN32") {
	$db = new Win32::ODBC( $DSN );
	die "ERROR ODBC: ". wenc(scalar Win32::ODBC::Error()) ."\n" if not $db;
}
if ($odbctype eq "WIN32") {
	if ( $db->Sql( "select table.date from table group by table.date order by table.date desc" )) {
		my $err = $db->Error();
		print "Error DBF SQL: " . &enc($err) . "\n";
	} else {
		while($db->FetchRow() )	{
			my(%Data) = $db->DataHash();
			print Dumper(%Data);
		}
	}
}
if ($odbctype eq "DBI") {
	my $ref_astore = $db->selectall_hashref( "select table.date from table group by table.date order by table.date desc",'date' );
	if (!defined($ref_astore)) {
		print "Error DBF: " . $db->errstr . "\n";
       	exit;
	} else {
		print join("\n",keys %{ $ref_astore } );
	}
}




Из-под apache я могу получить доступ к файлам, а обращаясь к списку DSN я вижу все DSN, которые я создаю в системе:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
my $dir = "e:/db/";
if (-d $dir) {
	print "OK $dir\n";
	opendir(my $dh, $dir) || die "Can't opendir $dir: $!";
	print join("\n",readdir($dh));
	closedir $dh;
}

my %dsn = Win32::ODBC::DataSources();

foreach my $key (sort keys %dsn) {
	print "<br>$key $dsn{$key}";
}




Код: plaintext
1.
2.
3.
OK e:/db/ . .. TABLE.DBF TABLE2.DBF TABLE3.DBF ... 
DB Microsoft dBase Driver (*.dbf)
DSN Microsoft dBase Driver (*.dbf)
EXDSN Microsoft dBase Driver (*.dbf)

Как это побороть?
...
Рейтинг: 0 / 0
dBase из apache = 1022 [Драйвер ODBC dBase] Дисковая или сетевая ошибка.
    #39357416
alexander.lunev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
решено. при запуске из апача нужно заполнить переменную окружения TMP.

Код: php
1.
$ENV{'TMP'} = 'C:\\DOCUME~1\\lan\\LOCALS~1\\Temp\\2';
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / dBase из apache = 1022 [Драйвер ODBC dBase] Дисковая или сетевая ошибка.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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