Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с DBF, Tranlate error.Value out of bounds 
V
    Опции темы
Alkash
Дата 12.8.2008, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


коллекционер жизни
**


Профиль
Группа: Участник
Сообщений: 516
Регистрация: 5.7.2004
Где: /

Репутация: нет
Всего: нет



Всем доброго времени суток. Проблема в следующем - есть лог, одной программы от мини-атс. Она сохраняет данные в dbf файл. Файл имеет следующую структуру
Цитата

           Файл C:\Calls.dbf 
     Индекс:IND 
   Инд. выражение: 
         0. Date, Date, FieldDefs.Items[i].Size=0 Fields[i].DataSize=4 
         1. Time, String, FieldDefs.Items[i].Size=11 Fields[i].DataSize=12 
         2. Dlit, String, FieldDefs.Items[i].Size=11 Fields[i].DataSize=12 
         3. In_Num, String, FieldDefs.Items[i].Size=20 Fields[i].DataSize=21 
         4. Ext_Line, String, FieldDefs.Items[i].Size=20 Fields[i].DataSize=21 
         5. Phone_Num, String, FieldDefs.Items[i].Size=40 Fields[i].DataSize=41 
         6. Bill_Code, String, FieldDefs.Items[i].Size=20 Fields[i].DataSize=21 
         7. Cost, String, FieldDefs.Items[i].Size=20 Fields[i].DataSize=21 
         8. Dir, String, FieldDefs.Items[i].Size=20 Fields[i].DataSize=21 
         9. Place, String, FieldDefs.Items[i].Size=20 Fields[i].DataSize=21 
         10. Prop_1, String, FieldDefs.Items[i].Size=20 Fields[i].DataSize=21 
         11. Prop_2, String, FieldDefs.Items[i].Size=20 Fields[i].DataSize=21 
         12. Calc, String, FieldDefs.Items[i].Size=20 Fields[i].DataSize=21

Данные получаю при помощи
Код

procedure MyDisplay();
var i,ii: Integer;
    F: TFieldDef;
    Ln,D: String;
begin
Form1.Table1.Active := True;
//--------------------------------
// имена полей
   Form1.ComboBox2.Items.Clear;
   for ii := 0 to Form1.table1.Fields.Count-1 do
   begin
     Form1.ComboBox2.Items.Add(Form1.Table1.Fields[ii].DisplayLabel);
   end;
   Form1.ComboBox2.ItemIndex:=0;
//--------------------------------
Form1.Table1.GetIndexNames(Form1.ComboBox1.Items);
Form1.ComboBox1.Items.Add('No Index');
Form1.ListBox1.Items.Add('            ФАЙЛ '+ Trim(Form1.MaskEdit1.Text));
   if (Form1.ComboBox1.Items.Count <> -1)and(Form1.ComboBox1.Items[0] <> 'No Index') then
 begin
  for  i:=0  to Form1.ComboBox1.Items.Count-2 do
  begin
        Form1.ListBox1.Items.Add('     Индекс:'+Form1.ComboBox1.Items[i]);
        Form1.ListBox1.Items.Add('     Инд.выражение:'+Form1.Table1.IndexDefs.Items[i].Expression);
  end;
 end;
with Form1.Table1 do begin
for i := 0 to FieldDefs.Count - 1 do begin
F := FieldDefs.Items[i];
case F.DataType of
ftUnknown: D := 'Unknown';
ftString: D := 'String';
ftSmallint: D := 'SmallInt';
ftInteger: D := 'Integer';
ftWord: D := 'Word';
ftBoolean: D := 'Boolean';
ftFloat: D := 'Float';     // а надо ftBytes
ftCurrency: D := 'Currency';
ftBCD: D := 'BCD';
ftDate: D := 'Date';
ftTime: D := 'Time';
ftDateTime: D := 'DateTime';
ftBytes: D := 'Bytes';
ftVarBytes: D := '';
ftBlob: D := 'BLOB';
ftMemo: D := 'Memo';
ftGraphic: D := 'Graphic';
else
D := '';
Ln:=''
end;
 Ln := 'FieldDefs.Items[i].Size='+ IntToStr(FieldDefs.Items[i].Size);
Ln := Ln+' Fields[i].DataSize='+IntToStr(Fields[i].DataSize);
Form1.ListBox1.Items.Add('        '+IntToStr(i)+'. '+F.Name + ', ' + D+', '+Ln);
end;
end;
//Form1.Table1.Active := False;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
 Form1.ListBox1.Items.Clear;
 Form1.ComboBox1.Items.Clear;
 Form1.ComboBox1.Items.Add('No Index');
 If Length(Table1.TableName)<>0 then
 begin
 Table1.Active:=False;
 end;
   If OpenDialog1.Execute then
   begin
     if Length(Opendialog1.Files[0])<>0 then
     begin
      Table1.TableName:=Opendialog1.FileName;
//      Table1.TableName:=
      MaskEdit1.Text:= Table1.TableName;
      MyDisplay();
     end;
   end;
end;


Всё работает, всё здорово. Проблема в том, что когда начинаешь перемещаться по записям - выдаётся ошибка 
Translate Error. Value out of bounds. В чём может быть проблема?
PS: Система Delphi 7


--------------------
Подпись >> /dev/null
PM MAIL ICQ MSN   Вверх
Данкинг
Дата 12.8.2008, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Не особо вникал в код, но советую подключаться через ADO и использовать обычные операторы движения по датасету: .next .prior и т.п.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

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


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0401 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.