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

Форум PHP

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Замена записи в DBF файле
 
 автор: Alph[p]a   (14.11.2011 в 11:59)   письмо автору
 
 

есть код


header('Content-Type: text/html; charset=cp866');
    set_time_limit(0);
    
    
$db = dbase_open('RD_DC_RS.DBF', 2);

if ($db) {
  // получим старую запись
  $row = dbase_get_record_with_names($db, 1);
  
  // сбросим пометку 'deleted' 
  unset($row['deleted']);

  
  // Установим в поле даты *****
  $row['NOMER'] = '';
  $row = array_values($row); 
  
  

  
  dbase_replace_record($db, $row, 1);
  dbase_close($db);
}
  


в итоге все проходит, файл портится, и больше не открывается темже DBFNavigator-ом...

что не так делаю?

  Ответить  
 
 автор: alph[p]a   (14.11.2011 в 13:42)   письмо автору
 
   для: Alph[p]a   (14.11.2011 в 11:59)
 

Вообще кажется понятно в чем проблема, в типах..
вопрос как затолкать в поле вида хххххххх число которое начинает с 0 ?

php думает что это восьмиричное число и базу идет не то значение... как?

  Ответить  
 
 автор: cheops   (14.11.2011 в 14:05)   письмо автору
 
   для: alph[p]a   (14.11.2011 в 13:42)
 

Для хранения таких чисел традиционно используются строки.

  Ответить  
 
 автор: Alph[p]a   (14.11.2011 в 14:47)   письмо автору
 
   для: alph[p]a   (14.11.2011 в 13:42)
 

опять вопрос, ну что не так?


<?php
    
    header
('Content-Type: text/html; charset=cp866');
    
set_time_limit(0);

  
$dbh dbase_open("BD_FIRM.DBF",2);
    if(!
$dbh) exit("Не могу подключится к базе"); 

  
$numrecords dbase_numrecords($dbh);
         
  
// gets the old row
  
$row dbase_get_record_with_names($dbh1);
  unset(
$row['deleted']);

  
$row['COD'] = "77777";
  
  
$row=array_values($row);
  
  
// Replace the record
  
dbase_replace_record($dbh$row1);
  
dbase_close($dbh);


  
?>



Warning: dbase_replace_record() [function.dbase-replace-record]: Wrong number of fields specified in C:\xampp\****

  Ответить  
 
 автор: cheops   (14.11.2011 в 14:49)   письмо автору
 
   для: Alph[p]a   (14.11.2011 в 14:47)
 

Говорит, что количество полей в массиве не соответствует количеству полей в C:\xampp\****

  Ответить  
 
 автор: Alph[p]a   (14.11.2011 в 15:09)   письмо автору
 
   для: cheops   (14.11.2011 в 14:49)
 

в том то и дело sizeof говорит что и там и там одинаково

единственное чтоя делаю так это unset($row['deleted']);

в мануале пхп так написано

  Ответить  
 
 автор: Alph[p]a   (14.11.2011 в 15:41)   письмо автору
 
   для: cheops   (14.11.2011 в 14:49)
 

а как не сооотвествует если я читаю и мне пишет что сам себе не верен...??

  Ответить  
 
 автор: cheops   (14.11.2011 в 15:59)   письмо автору
 
   для: Alph[p]a   (14.11.2011 в 15:41)
 

Во-первых вы один элемент удаляете, а другой вставляете (в конец массива). Выведите дамп массива $row - он выглядит именно так, как вы ожидаете?

  Ответить  
 
 автор: Alph[p]a   (14.11.2011 в 16:21)   письмо автору
 
   для: cheops   (14.11.2011 в 15:59)
 

все, вижу error, php не видит, поля типа "Memo". блин как исправить, как сделать так чтобы можно было обносять запись без них?

тоесть смотрю файл базы через DBFNavigator там есть два поля а дамп в пхп ничего не даёт, не видит, в итоге 2 поля просто исчезают, подставить я ничего туда не могу, затру правильные данные и база будет не база(( Как быть? Какие инструменты для работы с базами я могу использовать чтобы удовлетворить своё требование?

  Ответить  
 
 автор: Alph[p]a   (14.11.2011 в 16:43)   письмо автору
 
   для: Alph[p]a   (14.11.2011 в 16:21)
 

я вообще правильно копаю "driver odbc foxpro" ?

где вообще можно ченить почитать про то какая юзать dbase через php

  Ответить  
 
 автор: cheops   (14.11.2011 в 18:28)   письмо автору
 
   для: Alph[p]a   (14.11.2011 в 16:43)
 

Систематически пожалуй нигде, кроме как в справочном руководстве... есть парочка тем на форуме, но они вам вряд ли вам помогут с вашей проблемой.

  Ответить  
 
 автор: alph[p]a   (15.11.2011 в 10:04)   письмо автору
 
   для: cheops   (14.11.2011 в 18:28)
 

Может кому и пригодиться.

Работа с полями типо Memo в DBF файлах через PHP:
Вот тут есть класс и пример его использования.
http://stackoverflow.com/questions/1947348/how-to-read-foxpro-memo-with-php


но почему после замены файл становится испорченным?



$db = dbase_open('R.DBF', 2);

if ($db) {

  $row = dbase_get_record_with_names($db, 1);
  

  unset($row['deleted']);
 
  $row['NOMER'] = "00000777";
  $row=array_values($row);
 
  dbase_replace_record($db, $row, 1);
  dbase_close($db);
}

  Ответить  
Rambler's Top100
вверх

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