| |
автор: Felix (11.11.2004 в 18:50) |
|
| | Привет.
У меня стоит задача выгрузить данные хотябы в txt (в идеале нужно в dbf) но я ниразу ничего подобного не писал. Подскажите пож. с чего начать а лучще если есть дайте код для выгрузки а то я пхп знаю плохо, только учусь. | |
| |
|
|
| |
|
|
| |
для: Felix
(11.11.2004 в 18:50)
| | | Здесь бы очень помогла структура таблицы которую вы хотите преобразовать в dbf-формат... | |
| |
|
|
| |
|
|
| |
для: cheops
(11.11.2004 в 20:01)
| | | есть база (телефонная)
с файлами Dbf Mdx (тут как я понял идексы хранятся) Dbt 1 файл
как бы загнать в MySQL ??? Т.е. отдельные файлы преобразовать в таблицы хотябы.
Структуру выкладывать не смогу размер большой
вот кусок дбф:
cЙh •0 db866ru0 FAM C I C O C UL C DOM C KVARTIRA C TEL C
ЂЃЂ…‚ ѓ‚ 432 74 248264 ЂЃЂ…‚Ђ ’Џ 2523 126 320450 ЂЃЂ‡Ђ ‚Ќ 163 Ђ 32 342379 ЂЃЂ‡Ђ
там дос кодировка | |
| |
|
|
| |
|
|
| |
для: chip
(11.11.2004 в 21:00)
| | | Нет, такой кусок не пойдёт, здесь бы, конечно, сами файлы нужны, но мне очень уж не хочется получать телефонную базу по почте :) Давайте выясним сначала какие стоблцы в базе:
<?php
// Путь к файлу
$db_path = "test.dbf";
// Открываем файл
$dbh = dbase_open($db_path,0)
or die("Error! Could not open dbase database file '$db_path'.");
// Возвращаем информацию о столбцах
$column_info = dbase_get_header_info($dbh);
// Выводим
print_r($column_info);
?>
|
PS /*Мрачно поглядывая на файлы *.dat сомнительного содержания*/ А где базы в таком приятном формате берёте? | |
| |
|
|
| |
|
|
| |
для: cheops
(11.11.2004 в 21:25)
| | | переделал в тхт
АБАЕВ|Г|В| 43|2|74|248264|АБАЕВА|Т|П| 25|23|126|320450|
Щас нужно проанализировать файл .
Первое до | в один столбец следущее в другой и.д. но потом опять в первый.
Или проще переделать в cvs ? | |
| |
|
|
| |
|
|
| |
для: chip
(12.11.2004 в 20:01)
| | | Да в общем и такой формат тоже нормальный... Т.е. переконвертация отменяется или всё ещё требуется помощь? | |
| |
|
|
| |
автор: Felix (12.11.2004 в 05:02) |
|
| |
для: cheops
(11.11.2004 в 20:01)
| | | cheops, вот дамп базы которую надо выгрузить в dbf причем надо сделать так чтобы выгрузить можно было не всю базу а любой кусок по дате. | |
| |
|
|
| |
|
|
| |
для: Felix
(12.11.2004 в 05:02)
| | | Можно примерно вот так поступить
<?php
include "config.php";
// Определим структуру таблицы tbl
// в dbf-формате
$db_name = "tbl.dbf";
$def =
array(
array("date", "C", 50),
array("number", "N", 11, 0),
array("podrazd", "C", 50),
array("uchastok", "C", 50),
array("mehanizm", "C", 50),
array("kol_vo", "C", 50),
array("usl_podr", "C", 50),
array("usl_uch", "C", 50)
);
// Создаём таблицу в
if (!dbase_create($db_name, $def))
{
echo "Ошибка при создании dbf-таблицы";
exit();
}
// Извлекаем записи из MySQL
$query = "SELECT * FROM tbl";
$tbl = mysql_query($query);
if(!$tbl)
{
echo "Ошибка в синтаксисе SQL-запроса";
exit();
}
// Открываем созданный dbf-файл
$dbh = dbase_open("tbl.dbf",2)
or die("Ошибка - невозможно открыть '$db_name'");
// В цикле извлекаем записи из MySQL и
// заносим их в dbf
while($table = mysql_fetch_array($tbl))
{
echo $table['data'];
// Формируем структуру записи
$record =
array(
$table['data'],
$table['number'],
$table['podrazd'],
$table['uchastok'],
$table['mehanizm'],
$table['kol_vo'],
$table['usl_podr'],
$table['usl_uch']
);
// Добавляем запись в dbf-файл
if(!dbase_add_record($dbh,$record))
{
echo "Ошибка при добавлении записи в dbf-файл";
exit();
}
}
// Закрываем dbf-файл
dbase_close($dbh);
?>
|
PS Только с number - проблемы какие-то, может его текстовым как KOL_VO сделать? | |
| |
|
|
| |
|
|
| |
для: cheops
(12.11.2004 в 12:11)
| | | По дате - нужно только соотвествующим образом исправить SQL-запрос, например как по ссылке
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=679 | |
| |
|
|
| |
|
|
| |
для: cheops
(12.11.2004 в 12:15)
| | | cheops, привет.
Так то все вроде бы ничего, работает нормально вот только когда открываешь созданный dbf в Экселе или в Ассесе без разници, русские символы почемуто в виде кракозябров всяких проявляются, одним словом не читаются.
Не подскажешь как с этим бороться ?
Мне всяко надо чтобы данные были на русском. | |
| |
|
|
| |
|
|
| |
для: Felix
(15.11.2004 в 06:14)
| | | Судя по всему данные в MySQL набраны в DOS-кой кодировке. Можно сохранить дамп таблицы
где base - имя базы данных (действие выполняется в коммандной строке, а не в mysql). Полученный дамп конвертировать в win-1251 при помощи какого-нибудь перекодировщика (если есть Far можно при помощи его) и загрузить дамп по новой, предварительно уничтожив и созав таблицу
mysql>drop database base
mysql>create database base
|
действия выполняются в оболочке mysql, а следующая по загрузке в коммандной строке:
| |
| |
|
|
| |
|
|
| |
для: cheops
(15.11.2004 в 11:44)
| | | cheops, привет.
С подсказкой по кодировкам спасибо.
У меня еще проблема возникла.
Как я уже говорил мне необходимо выгружать за определенный период времени в том числе и по дням.
Я изменил запрос вот так :
// Извлекаем записи из MySQL
$query = "SELECT * FROM tbl WHERE year(data)=\"$year\" and month(data)=\"$month\"";
$tbl = mysql_query($query);
if(!$tbl)
|
но это только выгрузка за месяц а если я добавляю еще
то выдается ошибка о неверном синтаксисе и выгрузки за нужный день не происходит.
Подскажи пожалуйста как сделать верный запрос. Все переменные в скрипт передаются из формы. | |
| |
|
|
| |
|
|
| |
для: Felix
(15.11.2004 в 12:00)
| | | Хм... попробуйте сначала вывести весь запрос в окно браузера
<?php
echo $query."<br>";
?>
|
Может переменная $day где-нибудь зануляется или выходит за границы месяца... | |
| |
|
|
| |
|
|
| |
для: cheops
(15.11.2004 в 12:07)
| | | Нет, зануляться она не может и теряться тоже потому как я даже вручную вместо переменной цифрами все прописывал в коде.
Может это какой нибудь косяк в PHP ?
Я использую пакет "Денвер" c последней версией PHP 4 | |
| |
|
|
| |
|
|
| |
для: Felix
(15.11.2004 в 12:13)
| | | Только что с удивлением обнаружил, что такой функции (DAY) в MySQL нет :)))
Есть
DAYOFWEEK - для дня недели (0 - воскресенье)
WEEKDAY - для дня недели (0 - понедельник)
DAYOFMONTH - для дня месяца
DAYOFYEAR - для дня года | |
| |
|
|
| |
|
|
| |
для: cheops
(15.11.2004 в 12:36)
| | | :))
Все понятно.
Скажите пожалуйста а где взять список всех этих и других функций а то в книжке много чего нету. С описанием на русском языке. | |
| |
|
|
| |
|
|
| |
для: Felix
(15.11.2004 в 12:48)
| | | Боюсь я вам уже надоел но всетаки хочу еще спросить.
что нужно добавить в код чтобы в dbf файл не добавлялась информация новая к старой а чтобы выгужалась только новая как бы очистить файл перед записью новых данных. | |
| |
|
|
| |
|
|
| |
для: Felix
(15.11.2004 в 12:56)
| | | Каких-то специальных функций для очистки dbf-файла в PHP нет, но можно перед загрузкой данных просто уничтожать файл функцией unlink() и создавать по-новой.
PS Можете задавать столько вопросов сколько хотите - постараемся ответить на все :))) | |
| |
|
|
|
| |
|
|
| |
для: cheops
(15.11.2004 в 13:07)
| | | У меня чтото не получается сделать условие для выгрузки данных к моему скрипту выше.
Я допиал в скрипт вот такой код:
<?
// Извлекаем записи из MySQL
if($year != "" || $month == "" || $day == "") {
$query = "SELECT * FROM tbl WHERE year(data)='$year'";
$tbl = mysql_query($query);
}
elseif($year != "" || $month != "" || $day == "") {
$query = "SELECT * FROM tbl WHERE year(data)='$year' and month(data)='$month'";
$tbl = mysql_query($query);
}
else {
$query = "SELECT * FROM tbl WHERE year(data)='$year' and month(data)='$month' and dayofmonth(data)='$day'";
$tbl = mysql_query($query);
if(!$tbl)
{
echo "Ошибка в синтаксисе SQL-запроса";
exit();
}
}
?>
|
а при попытке выгрузить данные ругается на эту строку:
while($table = mysql_fetch_array($tbl))
|
| |
| |
|
|
| |
|
|
| |
для: Felix
(18.11.2004 в 09:45)
| | | А что-то я while($table = mysql_fetch_array($tbl)) в скрипте не вижу... Кстати, проверку
<?php
if(!$tbl)
{
echo "Ошибка в синтаксисе SQL-запроса";
exit();
}
?>
|
Следует проводить три раза, так как у вас три раза происходит обращение к функции mysql_query() - возможно где-нибудь всплывёт ошибка... | |
| |
|
|
| |
|
|
| |
для: cheops
(18.11.2004 в 11:33)
| | | Привет. Вот весь код целиком.
<?php
include "config.php";
// Определим структуру таблицы tbl
// в dbf-формате
$db_name = "tbl.dbf";
$def =
array(
array("date", "C", 50),
array("number", "N", 11, 0),
array("podrazd", "C", 50),
array("uchastok", "C", 50),
array("mehanizm", "C", 50),
array("kol_vo", "C", 50),
array("usl_podr", "C", 50),
array("usl_uch", "C", 50)
);
// Создаём таблицу в
if (!dbase_create($db_name, $def))
{
echo "Ошибка при создании dbf-таблицы";
exit();
}
// Извлекаем записи из MySQL
if($year != "" || $month === "" || $day === "") {
$query = "SELECT * FROM tbl WHERE year(data)='$year'";
$tbl = mysql_query($query);
if(!$tbl)
{
echo "Ошибка в синтаксисе SQL-запроса";
exit();
}
}
elseif($year != "" || $month != "" || $day === "") {
$query = "SELECT * FROM tbl WHERE year(data)='$year' and month(data)='$month'";
$tbl = mysql_query($query);
if(!$tbl)
{
echo "Ошибка в синтаксисе SQL-запроса";
exit();
}
}
else {
$query = "SELECT * FROM tbl WHERE year(data)='$year' and month(data)='$month' and dayofmonth(data)='$day'";
$tbl = mysql_query($query);
if(!$tbl)
{
echo "Ошибка в синтаксисе SQL-запроса";
exit();
}
}
// Открываем созданный dbf-файл
$dbh = dbase_open("tbl.dbf",2)
or die("Ошибка - невозможно открыть '$db_name'");
// В цикле извлекаем записи из MySQL и
// заносим их в dbf
while($table = mysql_fetch_array($tbl))
{
echo $table['data'];
// Формируем структуру записи
$record =
array(
$table['data'],
$table['number'],
$table['podrazd'],
$table['uchastok'],
$table['mehanizm'],
$table['kol_vo'],
$table['usl_podr'],
$table['usl_uch']
);
// Добавляем запись в dbf-файл
if(!dbase_add_record($dbh,$record))
{
echo "Ошибка при добавлении записи в dbf-файл";
exit();
}
}
// Закрываем dbf-файл
dbase_close($dbh);
?>
|
При попытке выгрузить данные ругается на эту строку:
while($table = mysql_fetch_array($tbl))
|
Как еще изменить запрос не знаю.
Нужно чтобы выгружалть можно было за любой день, месяц, или год целиком. | |
| |
|
|
| |
|
|
| |
для: Felix
(18.11.2004 в 19:24)
| | | Хм... попробуйте так же на всякий случай обработать ситуацию:
<?php
if($year === "" || $month === "" || $day === "")
{
echo "Все переменные обнулены";
}
?>
|
У меня ваш вариант на ура работает, правда я в самом начале скрипта определил переменную $year = 2004; | |
| |
|
|
| |
|
|
| |
для: cheops
(18.11.2004 в 19:40)
| | | Привет cheops.
Проверил в общем я еще все на сто раз, и как ты сказал я тоже проверил, переменные не обнуляются!!!
Что характерно, корректно работает только первое условие в данном случае выгрузка за год.
Я менял условия местами и опять таки корректно работает только первое в списке. При запросе с другим условием выгрузки, выгружаются либо вообще все данные из базы (не взирая на условие) либо вообще не выгружается ничего (пустой файл dbf), хотя ошибок теперь ни в каком случае не выдает! Парадокс не правда ли ?:)
Есть ли другие способы создать условие для выгрузки по датам ? Или может еще что нибудь в этом можно подправить ? | |
| |
|
|
| |
|
|
| |
для: Felix
(19.11.2004 в 05:43)
| | | Эх... а какже это мы просмотрели-то :( Условие
if($year != "" || $month === "" || $day === "")
|
будет всегда выполняться когла есть $year, так как логика "ИЛИ", а нужно "И"
if($year != "" && $month === "" && $day === "")
|
| |
| |
|
|
| |
|
|
| |
для: cheops
(19.11.2004 в 09:28)
| | | cheops, спасибо огромное за оказанную помощь.
Мой грандиозный проект закончен.
Благодаря ему мне возможно дадут квартиру и мы с женой наконец то будем жить отдельно от родителей.
С П А С И Б О !!!!!!! :) | |
| |
|
|
| |
|
|
| |
для: Felix
(19.11.2004 в 10:29)
| | | Ух ты! Тогда желаю удачи в выбивании квартиры! :))) | |
| |
|
|
| |
|
|
| |
для: cheops
(19.11.2004 в 10:43)
| | | cheops, у меня возникла еще идея.
Я сделал чтото типа мастера для редактирования уже внесенных данных в базу, а можно как нибудь сделать так чтобы я мог из админского интерфейса блокировать нужные мне строки, и чтобы при попытке юзером редактировать строку ему выскочило сообщение что строка заблокирована админом.
такое возможно ? | |
| |
|
|
| |
|
|
| |
для: Felix
(19.11.2004 в 11:10)
| | | Можно флажок ввести в каждую запись, т.е. поле типа ENUM которое принимает два значения "lock" (закрыто) и "unlock" (открыто)
ENUM('lock','unlock') NOT NULL default 'unlock'
|
А при редактировании проверять какое значение имеет та или иная запись. | |
| |
|
|
| |
|
|
| |
для: cheops
(19.11.2004 в 23:29)
| | | А как сделать проверку записи (lock, unlock) ? | |
| |
|
|
| |
|
|
| |
для: Felix
(22.11.2004 в 05:19)
| | | Хотя уже не надо. Я сам допер как это сделать
Спасибо за подсказку. | |
| |
|
|
| |
|
|
| |
для: Felix
(22.11.2004 в 06:27)
| | | MySQL принимает дату только в формате гггг.мм.дд , а мне надо чтобы пользователь вводил дату в формате дд.мм.гггг. Как сделать обработку чтобы дата из формата дд.мм.гггг перед занесением в базу преображалась в формат привычный для MySQL т.е. гггг.мм.дд.
????? | |
| |
|
|
| |
|
|
| |
для: Felix
(22.11.2004 в 07:17)
| | | Перенёс ответ в новую тему, а то это уже слишком длиная.
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=849 | |
| |
|
|
| |
|
|
| |
для: Felix
(11.11.2004 в 18:50)
| | | MySQL-Front
есть программа такая попробуй ее мож где она поможет ;)
а на wincmd.ru есть плагины для тотал-командера для работы с cvs и pdf
(для просмотра и конвертации) | |
| |
|
|