Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Добавление записи в dbf файл

Сообщения:  [1-10]   [11-12] 

 
 автор: cheops   (06.12.2004 в 13:00)   письмо автору
 
   для: Felix   (06.12.2004 в 07:17)
 

Нужно в таблице, которая в MySQL ввести первичный ключ (id) - ключ этот должен совпадать с порядковым номером записи в dbf-файле, тогда заменять записи в файле можно будет при помощи функции dbase_replace_record(), указывая в качестве третьего параметра первичный ключ записи:
<?php
    
if(!dbase_replace_record($dbh,$record,$table['id'])) 
    { 
      exit(
"Ошибка при обновлении записи в dbf"); 
    } 
?>


PS Правда в таком случае при формировании dbf-файла нужно будет всегда сортировать записи по первичному ключу (ORDER BY id)

   
 
 автор: Felix   (06.12.2004 в 07:17)   письмо автору
 
   для: cheops   (03.12.2004 в 11:32)
 

Привет Cheops.

Ну с этой задачей мы вроде бы справились :)
А как сделать так чтобы строки которые были выгружены в dbf и потом отредактированы в базе при повторной выгрузке записывались по верх старых не отредактированных а не в новой строке. Остальные данные при этом чтобы не пропали!!!

   
 
 автор: cheops   (03.12.2004 в 11:32)   письмо автору
 
   для: Felix   (03.12.2004 в 05:03)
 

Для этого можно воспользоваться функцией file_exists, проверяющей существует файл или нет:
<?php
  
if(!file_exists($db_name))
  {
    if (!
dbase_create($db_name$def)) 
    { 
      echo 
"Ошибка при создании dbf-таблицы"
      exit(); 
    } 
    else 
    { 
      exit(
"Блин, это мы что каждый раз файл перезаписываем?"); 
    }
  }
?>


http://www.softtime.ru/dic/id_dic=173&id_group=6

   
 
 автор: Felix   (03.12.2004 в 05:03)   письмо автору
 
   для: cheops   (02.12.2004 в 13:01)
 

Cheops, привет.

Явставил как ты мне написал код и он выводит "Блин, это мы что каждый раз файл перезаписываем?" это значит всетаки каждый раз перезаписываем файл поверх старых записей я так понимаю. а как сделать чтобы он проверял создан ли dbf и если создан то просто дописывал новые строки не трогая старые?

   
 
 автор: cheops   (02.12.2004 в 13:01)   письмо автору
 
   для: Felix   (02.12.2004 в 09:12)
 

Я думаю всё не так печально, я наконец-то добрался до вашего примера и попробовал подобавлять в ранее созданный нами http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=752 dbf-файл новые записи - добавляются на ура. Проверьте не срабатывает ли перед этим функция dbase_create()?
<?php
  
if (!dbase_create($db_name$def)) 
  { 
    echo 
"Ошибка при создании dbf-таблицы"
    exit(); 
  }
  else
  {
    exit(
"Блин, это мы что каждый раз файл перезаписываем?");
  }
?>


PS В любом случае отлаживаются такие сложные приложения следующим образом - создаётся отдельный маленький проект в задачи которого входит одна функция (например, добавить одну запись из таблицы в уже существующий файл) и на нём проверяется гипотеза - виновата библиотечная функция или ещё чего... Я всегда прибегаю к такому приёму когда работаю со сложным проектом.

   
 
 автор: Felix   (02.12.2004 в 09:12)   письмо автору
 
   для: glsv (Дизайнер)   (02.12.2004 в 08:49)
 

Все ясно. :-(

Хотелось бы еще услышать что скажет cheops по этому поводу.
Может он еще что нибудь знает. Он мне много в чем помог. (классный спец)
cheops помоги плиззз.

   
 
 автор: glsv (Дизайнер)   (02.12.2004 в 08:49)   письмо автору
 
   для: Felix   (02.12.2004 в 06:08)
 

Хм, в документации не так много DBF-функций
-----------------------------------------------------
dbase_add_record -- Add a record to a dBase database
dbase_close -- Close a dBase database
dbase_create -- Creates a dBase database
dbase_delete_record -- Deletes a record from a dBase database
dbase_get_header_info -- Get the header info of a dBase database
dbase_get_record_with_names -- Gets a record from a dBase database as an associative array
dbase_get_record -- Gets a record from a dBase database
dbase_numfields -- Find out how many fields are in a dBase database
dbase_numrecords -- Find out how many records are in a dBase database
dbase_open -- Opens a dBase database
dbase_pack -- Packs a dBase database
dbase_replace_record -- Replace a record in a dBase database
--------------------------------------------------------------------
И если dbase_add_record() отрабатывает не так как надо, то, наверное, других вариантов, кроме как создавать файл нет....

   
 
 автор: Felix   (02.12.2004 в 06:08)   письмо автору
 
   для: glsv (Дизайнер)   (01.12.2004 в 21:45)
 

А еще варианты есть ? Мне очень надо

   
 
 автор: glsv (Дизайнер)   (01.12.2004 в 21:45)   письмо автору
 
   для: Felix   (01.12.2004 в 19:00)
 

Наверное, тогда нужно создавать новый dbf-файл.
int dbase_create ( string filename, array fields)


И дописывать туда записи.

   
 
 автор: Felix   (01.12.2004 в 19:00)   письмо автору
 
   для: cheops   (01.12.2004 в 13:20)
 

Может и должен но как говорится не обязан. Он затирает ровно столько строк сколько ему необходимо для записи новых, а остальные не трогает.

Что можно сделать ?

   

Сообщения:  [1-10]   [11-12] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования