Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.005 c
2-1263392044
Виталий Панасенко
2010-01-13 17:14
2010.03.21
АДО и master-detail


15-1262069352
БарЛог
2009-12-29 09:49
2010.03.21
пример.испытание


15-1262156174
12
2009-12-30 09:56
2010.03.21
Можно ли как-то управлять кэшем mssql server?


6-1214555457
Галинка
2008-06-27 12:30
2010.03.21
сокеты и ip


3-1236865701
Zalum
2009-03-12 16:48
2010.03.21
изображение из поля blob





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский