|
Вопрос # 1 976/ вопрос открыт / |
|
Здравствуйте!
пытаюсь перегнать данные из .dbf в .mdb следующим образом:
но если нет данных добавляеться некоторое колличество данных и пишет ошибку :"Переполнение"
а если данные есть то еще при первом сравнении и обнавленнии появляется ошибка :'list index out of bounds (0)'
Пожалуста скажите в чем тут дело?
Приложение: Переключить в обычный режим- procedure TForm2.Button1Click(Sender: TObject);
- Var
- ExcelApp,Book,Sheet,V:Variant;
- I:Integer;
- ResultPath: string;
- Begin
- ADOQuery1.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) do
- begin
- if ((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),[]))
будет положительный ответ....
а это автоматически означает что в базе есть записи 
и хватит ставить мне минусы за вопрос... я же только учусь поэтому и задаю вопросы!!!! можно подумать что все сразу все знали!!!!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|