Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

Нужна проверка слабых мест   Найти похожие ветки 

 
Разведка   (2012-06-03 14:57) [0]

Сделал импорт файла Excel в ADO во временную таблицу по определенным полям. Нужно проверить есть ли потенциально опасные места в коде при которых могут возникать ошибки при импорте... Например, пользователь укажет не верные данные в Excel или же импортируемая таблица будет иметь не те поля или неверные типы полей ну т.д.

type
TFrmMain = class(TForm)
JvDBGOutput: TJvDBGrid;
JvDBGInput: TJvDBGrid;;
GrBoxFind: TGroupBox;
ChBoxDateFind: TCheckBox;
Act_Import_TabOutput: TAction;
Act_Import_TabInput: TAction;
ConnectBase: TADOConnection;
QueryOutput: TADOQuery;
QueryInput: TADOQuery;
OpenDlg: TOpenDialog;
Query: TADOQuery;
QueryImport: TADOQuery;
procedure Act_Import_TabOutputExecute(Sender: TObject);
procedure Act_Import_TabInputExecute(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure TableClear(TabName: String);
Procedure TabImportConnetion;
end;
var
 FrmMain:TFrmMain;
 CurPath,ConnStr:String;
Const mb_caption="Импорт расходов/приходов";
implementation

procedure TFrmMain.Act_Import_TabInputExecute(Sender: TObject);
begin
 //Вызов процедуры Диалога открытия и подключения таблицы Excel
 TabImportConnetion;
 //Проверка что QueryImport активный ()
 if Not QueryImport.Active then Exit;
  if (QueryImport.FindField("Дата")=Nil) or
    (QueryImport.FindField("Приход")=Nil) or
    (QueryImport.FindField("Валюта")=Nil) or
    (QueryImport.FindField("Информация")=Nil) then
   begin
     MessageBox(Handle,PChar("Неудалось выполнить импорт данных."),
        PChar(mb_caption),MB_ICONWARNING);
     exit;
   end;
 //Очистка всей таблицы TabOutput перед импортом данных
 TableClear("TabInput");
 //Цеклический перенос записей в базу из Excel
 QueryImport.First;
 While Not QueryImport.Eof do
   begin
     with Query do
       begin
         //Пропускается импорт строк имеющие пустые значения в значимых полях
   if QueryImport.FindField("Дата").IsNull or
            QueryImport.FindField("Приход").IsNull then
           begin
             QueryImport.next;
             Continue;
           end;        
   Close;SQL.Clear;
         SQL.Add("INSERT INTO TabInput (FDate,FInput,Valuta,Coment) ");
         SQL.Add("VALUES (:FDate,:FInput,:FValuta,:FComent)");
         //Заполнение параметров для запроса QueryImport из QueryImport
         Parameters.ParamByName("FDate").Value:=QueryImport.FindField("Дата").AsDateTime;
         Parameters.ParamByName("FInput").Value:=QueryImport.FindField("Приход").AsFloat;
         Parameters.ParamByName("FValuta").Value:=QueryImport.FindField("Валюта").AsStrin g;
         Parameters.ParamByName("FComent").Value:=QueryImport.FindField("Информация").AsS tring;
         ExecSQL;
       end;
     QueryImport.Next;
   end;
   QueryInput.Close;
   QueryInput.Open;
   QueryImport.Close;
   LblTabInput.Caption := "Файл таблицы Прихода: "+ExtractFileName(OpenDlg.FileName);
end;

procedure TFrmMain.Act_Import_TabOutputExecute(Sender: TObject);
begin
 //Вызов процедуры Диалога открытия и подключения таблицы Excel
 TabImportConnetion;
 if QueryImport.Active = false then Exit;
 if (QueryImport.FindField("Дата") = Nil) or
    (QueryImport.FindField("Расход") = Nil) or
    (QueryImport.FindField("Валюта") = Nil) or
    (QueryImport.FindField("Информация") = Nil) then
   begin
     MessageBox(Handle,PChar("Неудалось выполнить импорт данных."),
      PChar(mb_caption),MB_ICONWARNING);
     exit;
   end;
 //Очистка всей таблицы TabOutput перед импортом данных
 TableClear("TabOutput");
 //Цеклический перенос записей в базу из Excel
 QueryImport.First;
 While Not QueryImport.Eof do
   begin
     with Query do
       begin
   //Пропускается импорт строк имеющие пустые значения в значимых полях
         if QueryImport.FindField("Дата").IsNull or
            QueryImport.FindField("Расход").IsNull then
           begin
             QueryImport.next;
             Continue;
           end;
         Close;
         SQL.Clear;
         SQL.Add("INSERT INTO TabOutput (FDate,FOutput,Valuta,Coment) ");
         SQL.Add("VALUES (:FDate,:FOutput,:FValuta,:FComent)");
         // Заполнение параметров для запроса QueryImport из QueryImport
         Parameters.ParamByName("FDate").Value:=QueryImport.FindField("Дата").AsDateTime;
         Parameters.ParamByName("FOutput").Value:=QueryImport.FindField("Расход").AsFloat ;
         Parameters.ParamByName("FValuta").Value:=QueryImport.FindField("Валюта").AsStrin g;
         Parameters.ParamByName("FComent").Value:=QueryImport.FindField("Информация").AsS tring;
         ExecSQL;
       end;
       QueryImport.next;
   end;
   QueryOutput.Close;
   QueryOutput.Open;
   QueryImport.Close;
   LblFileTabOutput.Caption:="Файл таблицы расхода: "+ExtractFileName(OpenDlg.FileName);
end;

procedure TFrmMain.FormCreate(Sender: TObject);
begin
 CurPath:=ExtractFilePath(Application.ExeName);
 //Подключаем основную базу  base_test.mdb
 ConnStr:="Provider=Microsoft.Jet.OLEDB.4.0;"+
  "Data Source="+CurPath+"base_test.mdb;Persist Security Info=False";
 ConnectBase.ConnectionString := ConnStr;
 ConnectBase.Connected:=true;
 ConnectBase.BeginTrans;
 QueryOutput.Active:=True;
 QueryInput.Active :=True;
 JvGradient1.Align :=alClient;
end;

procedure TFrmMain.TabImportConnetion;
var SelSheet: integer;
begin
OpenDlg.FileName := "";
 if Not OpenDlg.Execute then Exit;
 //Подключение таблиццы Excel как базу данных в ADO
 ConnectImport.Close;
 QueryImport.Close;
 ConnectImport.ConnectionString := "Provider=Microsoft.Jet.OLEDB.4.0;"+
    "Data Source="+OpenDlg.FileName+
    ";Extended Properties=Excel 8.0;";
 //ConnectImport.Connected:=true;
 try
   ConnectImport.open;
     //Получаем список листов Книги из файла Excel
    FrmSelectSheet.LBoxSheets.Clear;
    ConnectImport.GetTableNames(FrmSelectSheet.LBoxSheets.Items);
    if FrmSelectSheet.LBoxSheets.Count = 0 then
     begin
      MessageBox(Handle,PChar("Не удалось из Excel ни одного листа"),PChar(mb_caption),MB_ICONWARNING);
      Exit;
     end;
    FrmSelectSheet.ShowModal;
 if FrmSelectSheet.LBoxSheets.ItemIndex = -1 then SelSheet := 0
 else SelSheet:=FrmSelectSheet.LBoxSheets.ItemIndex;
 //Делаем SQL запрос и получаем всю таблицу целиком в QueryImport
 //Из выбранного листа Excel
 QueryImport.Connection := ConnectImport;
 QueryImport.SQL.Text := "SELECT * FROM ["+FrmSelectSheet.LBoxSheets.Items[SelSheet]+"]";
 QueryImport.Open;
 except
   MessageBox(Handle,PChar("Не удалось получить данные из файла: "
      +ExtractFileName(OpenDlg.FileName)),
      PChar(mb_caption),MB_ICONWARNING);
   QueryImport.Close;
   exit;
 end;
end;

procedure TFrmMain.TableClear(TabName: String);
begin
 With Query do
 begin
  SQL.Clear;
  SQL.Text:="DELETE FROM "+TabName;
  ExecSQL;
 end;
end;
end.


 
Разведка   (2012-06-03 14:59) [1]

может быть код целиком сбросить на файлообменник?


 
sniknik ©   (2012-06-03 15:28) [2]

в Jet вся эта хрень с переносом данных в файл экселя делается одним запросом, для этого есть ISAM Excel.


 
Разведка   (2012-06-03 17:02) [3]


> sniknik ©   (03.06.12 15:28) [2]
> в Jet вся эта хрень с переносом данных в файл экселя делается
> одним запросом, для этого есть ISAM Excel.


Нужно что бы при переносе в новой таблице появлялись новые поля key -ключевое и Link -для связи, а еще проверка проводилась, те ли данные пользователь импортирует? ответствуют ли названия полей и нет ли лишних полей в таблице? Будет ли это выполняться в одном запросе?


 
sniknik ©   (2012-06-03 18:30) [4]

как напишешь. ты программист или где?


 
Разведка   (2012-06-03 19:07) [5]


> sniknik ©   (03.06.12 18:30) [4]
> как напишешь. ты программист или где?


А ведь всего все сразу и не узнаешь. Нужно что бы кто то направлял на правильные мысли.


 
sniknik ©   (2012-06-03 19:33) [6]

а я не направил? или нужно прямое указание? ну так, бери справку, и читай про исам-ы!


 
Разведка   (2012-06-04 19:40) [7]


> sniknik ©   (03.06.12 19:33) [6]
> а я не направил? или нужно прямое указание? ну так, бери
> справку, и читай про исам-ы!


Не понятно чем оно лучше?


 
Разведка   (2012-06-04 19:44) [8]


> sniknik ©   (03.06.12 19:33)


Поискал, по поисковикам информацию по вашему этому ISAM - результат
у людей только одни проблемы какие то сплошные весь инет завален только просьбами как исправить то одни глюки, то другие.  Впечатление такое, что такие технологи нам ненужны.


 
sniknik ©   (2012-06-04 19:51) [9]

> Не понятно чем оно лучше?
раз в 100 быстрее чем то, что сделаешь ты, даже если уберешь из кода выше все тормозные места.

> у людей только одни проблемы какие то
странно, а у меня их нет. вывод - я не человек, я программист.


 
Anatoly Podgoretsky ©   (2012-06-05 10:18) [10]


> Разведка   (04.06.12 19:40) [7]

Можешь не читать


 
KSergey ©   (2012-06-05 15:06) [11]

> Разведка   (03.06.12 14:57) 

А в чем ваш вопрос? Мне не понятно.
Говорите - надо сделать проверки - ну сделайте проверки, если надо.
А вы написали "надо сделать проверки" и привели портянку кода.

А в чем вопрос-то?



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.062 c
2-1341560100
Просто ФАН
2012-07-06 11:35
2013.03.22
ошибка при копирование файла


15-1337084902
alexdn
2012-05-15 16:28
2013.03.22
Так что там с шаттлами?


1-1295644073
Wadimka
2011-01-22 00:07
2013.03.22
Конвертация даты в миллисекундах в TDateTime


15-1350484358
xayam
2012-10-17 18:32
2013.03.22
Наиболее эффективный алгоритм сжатия


15-1348475426
AV
2012-09-24 12:30
2013.03.22
Оптимизировать/придумать алгоритм. Просто так.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский