Форум: "Начинающим";
Текущий архив: 2010.03.21;
Скачать: [xml.tar.bz2];
ВнизВставка записей в БД циклом Найти похожие ветки
← →
Soi (2010-01-20 05:41) [0]Всем доброго времени суток. Вопрос такой: в цикле я читаю Excel -файл и с помощью запроса вставляю прочитанные строки в БД, как можно при возникновении определенного условия (например если встретилась пустая строка ) пропустить данную итерацию цикла и перейти к следующей?
Проблема в том, что запрос выдает ошибку как только в Excel-файле встречается пустая строка. Сразу скажу, что убрать эти пустые строки в excel-файле нельзя - такая специфика задачи.
Пробовал в цикле использовать команду "Continue" - не помогает.
Ниже привожу кусок кода:procedure TForm1.Button1Click(Sender: TObject);
var
tabnomer,count:integer;
sum: string;
excel:variant;
begin
count_column_row; //Подсчет кол-ва строк и столбцов в Excel- файле
data(); //Преобразование даты в Галактиканский формат
excel:=createoleobject("excel.application");
excel.workbooks.open("c:\card.xls");
adoquery1.Active:=false;
adoquery1.SQL.Clear;
for count:=4 to rows do begin
tabnomer:=excel.workbooks[1].worksheets[1].cells[count,2];//Столбец Табельный номер
sum:=excel.workbooks[1].worksheets[1].cells[count,7];//Столбец Сумма покупки
if (length(inttostr(tabnomer))=0) and (length(sum)=0) then Continue; //Проверка на отсутствие номера карточки
adoquery1.SQL.add("insert into T$SHTRAF (F$CSCHETK, F$CSUBSCHK,F$DATAN, F$DATANSK, F$DATOK, F$FLAG3, F$NAMEPL1, F$POMETKA, F$SUMUD, F$TABN, F$VIDUD, F$PRPER)");
adoquery1.SQL.add("values ("+"51"+", "+""""+"01"+""""+", "+""""+label3.Caption+""""+", "+""""+label3.Caption+""""+", "+""""+label3.Caption+""""+", "+""""+"+"+""""+", "+""""+label4.Caption+""""+", "+""""+"+"+""""+", "+""""+sum+""""+", "+""""+inttostr(tabnomer)+""""+", "+"68"+", "+"1"+")");
adoquery1.SQL.Add("update T$SHTRAF set F$CLSCH=(select F$NREC from T$LSCHET where F$TABN="+""""+inttostr(tabnomer)+""""+"), F$TPERSON=(select F$NREC from T$PERSONS where F$TABNMB="+""""+inttostr(tabnomer)+""""+") where F$TABN="+""""+inttostr(tabnomer)+""""+" and F$SUMUD="+""""+sum+""""+" ");
adoquery1.ExecSQL;
adoquery1.SQL.Clear;
end;
excel.DisplayAlerts := False;
excel.Quit;
adoquery1.Active:=true;
end;
← →
engine © (2010-01-20 07:16) [1]Так не вставляй, ежели "пустые"
← →
Вариант (2010-01-20 07:41) [2]
> Soi (20.01.10 05:41)
> Пробовал в цикле использовать команду "Continue" - не помогает.
Тем не менееif <условие работы с базой> then begin <а все внутри что надо> end;
илиif <условие пропуска итерации> then continue;
А раз тебе не помогло, то проблема в правильном условии:
1) AND или OR должен быть?
2)
> tabnomer:=excel.workbooks[1].worksheets[1].cells[count,2];
> //
А вот unassigned variant в integer преобразуется как 0 и поэтому tabnomer при пустой ячейке будет = 0 и твое условие пропуска итерации никогда не выполнится
← →
EvChul © (2010-01-20 10:13) [3]а не проще ли получить доступ к Экселю через JET, а потом работать с получившимся датасетом?
← →
Soi (2010-01-20 10:50) [4]Все вопрос решился, спасибо "Вариант" за помощь, дело действительно было в операторе OR. Блин, сам бы еще долго наверное парился. :)
← →
Anatoly Podgoretsky © (2010-01-20 11:56) [5]> Soi (20.01.2010 05:41:00) [0]
Ты уверен, что эта конструкция if (length(inttostr(tabnomer))=0)then Continue; Отработает?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.03.21;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c