| 
| 
 | Вопрос # 1 976/ вопрос открыт / | 
 |  Здравствуйте!пытаюсь перегнать данные из .dbf в .mdb следующим образом:
 но если нет данных добавляеться некоторое колличество данных и пишет ошибку :"Переполнение"
 а если данные есть то еще при первом сравнении и обнавленнии появляется ошибка :'list index out of bounds (0)'
 Пожалуста скажите в чем тут дело?
 Приложение:Переключить в обычный режим procedure TForm2.Button1Click(Sender: TObject);VarExcelApp,Book,Sheet,V:Variant;I:Integer;ResultPath: string; BeginADOQuery1.Close;ADOQuery1.SQL.Clear;ADOQuery1.SQL.Add('select * from Voditely ');ADOQuery1.Open;ResultPath:=ExtractFilePath(Application.ExeName)+'GENERAL.xls';ExcelApp:=CreateOleObject('Excel.Application');ExcelApp.Workbooks.Open(ResultPath);Book:=ExcelApp.Workbooks[1];Sheet:=Book.Worksheets[1];I:=2;V:= Sheet.Cells[I, 1].Value;While Not VarIsEmpty(V) dobeginif ((Sheet.Cells[I, 1].Value=1) or (Sheet.Cells[I, 1].Value=2))  then  begin       Edit2.Text:=Sheet.Cells[I, 2].Value;      Edit3.Text:=Sheet.Cells[I, 5].Value+' '+Sheet.Cells[I, 6].Value+' '+Sheet.Cells[I, 7].Value;     If (Form1.ADOQuery1.Locate(Form1.ADOQuery1.Fields.Fields[0].FieldName,StrToInt(Edit2.Text),[]))
 then   begin  ADOQuery1.Close;  ADOQuery1.SQL.Clear;  ADOQuery1.SQL.Add('update Voditely set FIO ='+ QuotedStr(Edit3.Text)+' where tabNom =
'+IntToStr(ADOQuery1.Fields.Fields[0].AsInteger));  ADOQuery1.ExecSQL;   end  else        begin    ADOQuery1.Close;    ADOQuery1.SQL.Clear;    ADOQuery1.SQL.Add('insert into Voditely (tabNom, FIO) values('+ QuotedStr(Edit2.Text)+','+
QuotedStr(Edit3.Text)+')');    ADOQuery1.ExecSQL;         end; end; Inc(I); V:= Sheet.Cells[I, 1].Value;end;ExcelApp.ActiveWorkbook.Close;ExcelApp.Application.Quit;  end;
|  |   Вопрос задала: Танюшка (статус: Посетитель)Вопрос отправлен: 8 октября 2008, 12:55
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 4; последнее сообщение — 8 октября 2008, 14:37; участников в обсуждении: 2. 
|   | Вадим К (статус: Академик), 8 октября 2008, 13:01 [#1]:вот только где здесть dbf... я не вижу. Во вторых, выдаёт ошибку времени выполнения? а строчку отметить, которая при этом выделяется?
 у нас нет Ваших исходных данных - мы не можем повторить эксперимент...
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Танюшка (статус: Посетитель), 8 октября 2008, 14:10 [#2]:ResultPath:=ExtractFilePath(Application.ExeName)+'GENERAL.dbf'; 
 делфи строчки не выделяет т.к. выдает ошибку при выполнении ADOQuery1.SQL.Add('update Voditely set FIO ='+ QuotedStr(Edit3.Text)+' where tabNom = '+IntToStr(ADOQuery1.Fields.Fields[0].AsInteger));
 
 или
 ADOQuery1.SQL.Add('insert into Voditely (tabNom, FIO) values('+ QuotedStr(Edit2.Text)+','+ QuotedStr(Edit3.Text)+')');
 |  
|   | Вадим К (статус: Академик), 8 октября 2008, 14:28 [#3]:ну юзать эксель для того, что бы dbf парсить - это изращения отменные. Я даже боюсь своими советами мешать. по поводу строки
 ADOQuery1.Fields.Fields[0].AsInteger
 а кто сказал, что там есть хотя бы одно поле? где проверка?
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Танюшка (статус: Посетитель), 8 октября 2008, 14:37 [#4]:спасибо я уже разобралась ... там в самой базе акцессовской нужно было изменить формат поля с целого на длинное целое. а на счет проверки .... если вы не заметили то этот кусок кода выполняется если при проверки
 If (Form1.ADOQuery1.Locate(Form1.ADOQuery1.Fields.Fields[0].FieldName,StrToInt(Edit2.Text),[]))
 будет положительный ответ....
 а это автоматически означает что в базе есть записи
  и хватит ставить мне минусы за вопрос... я же только учусь поэтому и задаю вопросы!!!! можно подумать что все сразу все знали!!!!
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |