Форум: "Начинающим";
Текущий архив: 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