Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Диплом востановленный.doc
Скачиваний:
0
Добавлен:
23.01.2020
Размер:
6.47 Mб
Скачать

4.2.4. Определение технологии доступа к компонентам данных.

Основными компонентами работы с данными являются:

  • Клиентская программа;

  • Хранилище данных;

  • Программное обеспечение SQL Server.

Рис. 76 Диаграмма компонентов.

Рис. 77 Диаграммам компонентов

4.3. Разработка программы для импорта бд из Excel в MsSql

При разработке информационной системы по автоматизации хранения и учета договоров, стал вопрос о переносе существующих данных по договорам в новое хранилище. Для реализации данной задачи необходимо было создать программу по импорту данных из Excel, где они хранились, в БД MsSQL.

В качестве среды разработки был выбран Borland C++ Builder (пункт 4.2.2.1.).

Клиентская программа содержит одну форму Импорт:

Форма содержит следующие управляющие элементы:

  • ADOConnection1;

  • ADOQuery1- ADOQuery6;

  • DataSource1;

  • DBGrid1;

  • Edit1-Edit19 – поля для ввода значений;

  • Button1 – кнопка выхода;

  • Button2 – кнопка импорта из Excel в MsSQL.

Для выгрузки данных из Excel и их парсировки в БД были созданы 2 таблицы:

1.perev в данную таблицу выгружаются данные их Excel

2. TPO в этой таблицы хранятся данные после парсировки, далее они будут перенаправлены в другие таблицы БД.

Для парсировки, вывода и добавления данных были использованы следующие процедуры:

  • Процедура парсировки (разбиение строки)

CREATE PROCEDURE VstavkaPer

AS

declare @org varchar(500)

declare @dog varchar(500)

declare @sotrud varchar(500)

declare @adres varchar(500)

declare @tel varchar(500)

declare @naimen varchar(500)

declare @srok varchar(500)

declare @usl varchar(500)

declare @summa varchar(500)

declare @nazv varchar(500)

declare @INN varchar(100)

declare @KPP varchar(100)

declare @OKPO varchar(100)

declare @OGRN varchar(100)

declare @gorod varchar(100)

declare @index varchar(100)

declare @ulica varchar(100)

declare @dom varchar(100)

declare @office varchar(100)

declare @f varchar(100)

declare @i varchar(100)

declare @o varchar(100)

declare @dol varchar(100)

declare @nomer varchar(500)

declare @dataZakl1 varchar(100)

declare @dataNach1 varchar(100)

declare @dataZav1 varchar(100)

declare @sum varchar(100)

declare @uslov varchar(100)

declare @dogovor varchar(100)

declare @naimenov varchar(100)

declare @dataZakl datetime

declare @dataNach datetime

declare @dataZav datetime

set DATEFORMAT DMY

set @dataZakl =convert(datetime,@dataZakl1)

set @dataNach=convert(datetime,@dataNach1)

set @dataZav=convert(datetime,@dataZav1)

declare @ID int

set @ID=(Select id_t from perev where Название_орг=@org and Договор=@dog and Сотрудники=@sotrud and Адрес=@adres and Телефон=@tel and Наименование=@naimen and Срок_работ=@srok and Условие=@usl)

DECLARE _cursor CURSOR FOR

SELECT Название_орг,Договор,Сотрудники,Адрес,Телефон,Наименование,Срок_работ,Условие,Сумма

FROM perev

OPEN _cursor

FETCH next FROM _cursor INTO @org,@dog,@sotrud,@adres,@tel,@naimen,@srok,@usl,@summa

WHILE @@FETCH_STATUS=0

BEGIN

set @nazv=@org

declare @delimeter char

set @delimeter =’ ‘

declare @s int

declare @s0 int

select

@s=charindex(@delimeter,@dog ),

@s0=charindex(@delimeter,RIGHT(@dog ,len(@dog )-@s )),

@dogovor=substring(@dog ,0,@s),@dataZakl=RIGHT(@dog,len(@dog )-@s-@s0)

select @dogovor,@dataZakl

declare @s1 int

declare @s2 int

declare @s3 int

select

@s1=charindex(@delimeter,@sotrud ),

@s3=charindex(@delimeter,RIGHT(@sotrud ,len(@sotrud )-@s1)),

@s2=charindex(@delimeter,RIGHT(@sotrud ,len(@sotrud )-@s1-@s3)),

@dol=substring(@sotrud ,0,@s1),@f=substring(@sotrud ,@s1+1,@s3),

@i=substring(@sotrud ,@s1+@s3+1,@s2),

@o=RIGHT(@sotrud ,len(@sotrud )-@s1-@s3-@s2)

select @dol,@f,@i,@o

declare @s4 int

declare @s5 int

declare @s6 int

declare @s7 int

select

@s4=charindex(@delimeter,@adres ),

@s5=charindex(@delimeter,RIGHT(@adres ,len(@adres )-@s4)),

@s6=charindex(@delimeter,RIGHT(@adres ,len(@adres )-@s4-@s5)),

@s7=charindex(@delimeter,RIGHT(@adres ,len(@adres )-@s4-@s5-@s6)),

@index=substring(@adres ,0,@s4),

@gorod=substring(@adres ,@s4+1,@s5),

@ulica=substring(@adres ,@s4+@s5+1,@s6),

@dom=substring(@adres ,@s4+@s5+@s6+1,@s7),

@office=RIGHT(@adres ,len(@adres )-@s4-@s5-@s6-@s7)

select @index,@gorod,@ulica,@dom,@office

set @nomer=@tel

set @naimenov=@naimen

declare @s8 int

declare @s9 int

select

@s8=charindex(@delimeter,@srok ),

@s9=charindex(@delimeter,RIGHT(@srok ,len(@srok )-@s8 )),

@dataNach=substring(@srok ,0,@s8),@dataZav=RIGHT(@srok,len(@srok )-@s8-@s9)

select @dataNach,@dataZav

set @uslov=@usl

set @sum=@summa

declare @IDtp int

set @Idtp=(Select id_tpo from TPO where название_орг=@nazv and город=@gorod and индекс=@index and улица=@ulica and дом=@dom)

if @Idtp is null begin

insert into TPO (название_орг,ИНН,КПП,ОКПО,ОГРН,город,индекс,улица,дом,офис,фамилия,имя,отчество,должность,телефон,дата_закл,дата_нач,дата_зав,сумма,условие,договор,наименование)

values(@nazv,@INN,@KPP,@OKPO,@OGRN,@gorod,@index,@ulica,@dom,@office,@f,@i,@o,@dol,@nomer,@dataZakl,@dataNach,@dataZav,@sum,@uslov,@dogovor,@naimenov)

set @Idtp=IDENT_CURRENT(‘TPO’)

end

FETCH next FROM _cursor INTO @org,@dog,@sotrud,@adres,@tel,@naimen,@srok,@usl,@summa

end

close _cursor

DEALLOCATE _cursor

GO

  • Процедура добавления выгруженных данных после парсировки в остальные таблицы бд.

CREATE PROCEDURE DobVstavkaT

@org varchar(50),

@INN varchar(50),

@KPP varchar(50),

@OKPO varchar(50),

@OGRN varchar(50),

@gorod varchar(50),

@index int,

@ulica varchar(50),

@dom varchar(50),

@office varchar(50),

@f varchar(50),

@i varchar(50),

@o varchar(50),

@dol varchar(50),

@nomer varchar(50),

@dataZakl datetime,

@dataNach datetime,

@dataZav datetime,

@sum varchar(50),

@usl varchar(50),

@dog varchar(50),

@naimen varchar(50)

AS

declare @IDGorod int

declare @IDOrg int

declare @IDAdres int

declare @IDDol int

declare @IDSotrud int

declare @IDKon int

declare @IDTel int

declare @IDVid int

declare @IDDog int

declare @IDUsl int

declare @IDSdel int

set @IDGorod=(Select id_gorod from Город where город=@gorod)

if @IDGorod is null begin

insert into Город (город)

values (@gorod)

set @IDGorod=IDENT_CURRENT('Город')

end

set @IDOrg=(Select id_nazv_org from Название_орг where название=@org and ИНН=@INN and КПП=@KPP and ОКПО=@OKPO and ОГРН=@OGRN)

if @IDOrg is null begin

insert into Название_орг (название,ИНН,КПП,ОКПО,ОГРН)

values (@org,@INN,@KPP,@OKPO,@OGRN)

set @IDOrg=IDENT_CURRENT('Название_орг')

end

set @IDAdres=(Select id_adres from Адрес where индекс=@index and улица=@ulica and дом=@dom and офис=@office and id_gorod=@IDGorod and id_nazv_org=@IDOrg)

if @IDAdres is null begin

insert into Адрес (индекс,улица,дом,офис,id_gorod,id_nazv_org)

values (@index,@ulica,@dom,@office,@IDGorod,@IDOrg)

set @IDAdres=IDENT_CURRENT('Адрес')

end

set @IDDol=(Select id_dolgnost from Должность where должность=@dol)

if @IDDol is null begin

insert into Должность (должность)

values (@dol)

set @IDDol=IDENT_CURRENT('Должность')

end

set @IDSotrud=(Select id_sotrud from Сотрудники where фамилия=@f and имя=@i and отчество=@o and id_dolgnost=@IDDol and id_nazv_org=@IDOrg)

if @IDSotrud is null begin

insert into Сотрудники (фамилия,имя,отчество,id_dolgnost,id_nazv_org)

values (@f,@i,@o,@IDDol,@IDOrg)

set @IDSotrud=IDENT_CURRENT('Сотрудники')

end

declare @kon varchar(50)

set @IDKon=(Select id_kontact from Контакт where контакт=@kon)

if @IDKon is null begin

insert into Контакт (контакт)

values ('все')

set @IDKon=IDENT_CURRENT('Контакт')

end

set @IDTel =(Select id_telefon from Телефон where номер=@nomer and id_kontact=@IDKon and id_sotrud=@IDSotrud)

if @IDTel is null begin

insert into Телефон (номер,id_kontact,id_sotrud)

values (@nomer,@IDKon,@IDSotrud)

set @IDTel =IDENT_CURRENT('Телефон')

end

declare @vid varchar(50)

declare @ist varchar(50)

set @IDVid=(Select id_vid_rabot from Вид_работ where вид_работ=@vid and источник_на_поставку=@ist)

if @IDVid is null begin

insert into Вид_работ (вид_работ,источник_на_поставку)

values ('техперевооружение',' ')

set @IDVid=IDENT_CURRENT('Вид_работ')

end

set @IDDog=(Select id_dog from Договор where договор=@dog and наименование=@naimen and id_vid_rabot=@IDVid)

if @IDDog is null begin

insert into Договор (договор,наименование,id_vid_rabot)

values (@dog,@naimen,@IDVid)

set @IDDog =IDENT_CURRENT('Договор')

end

set @IDUsl=(Select id_uslov from Условие where условие=@usl)

if @IDUsl is null begin

insert into Условие (условие)

values (@usl)

set @IDUsl=IDENT_CURRENT('Условие')

end

set @IDSdel =(Select id_sdelka from Сделка where id_dog=@IDDog and id_nazv_org=@IDOrg and дата_заключения=@dataZakl and дата_начала=@dataNach and дата_завершения=@dataZav and сумма=@sum and id_uslov=@IDUsl)

if @IDSdel is null begin

insert into Сделка (id_dog,id_nazv_org,дата_заключения,дата_начала,дата_завершения,сумма,id_uslov)

values (@IDDog,@IDOrg,@dataZakl,@dataNach,@dataZav,@sum,@IDUsl)

set @IDSdel =IDENT_CURRENT('Сделка')

end

GO

  • Процедура для вывода значений таблицы TPO

CREATE PROCEDURE ZaprosTPO

AS

select *

from TPO

GO

Используемый программный код:

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

//--------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

AnsiString DataRoch;

AnsiString DataRoch1;

AnsiString DataRoch2;

//--------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

ADOQuery1->ConnectionString = WideString("Provider=MSDASQL.1;Persist Security Info=False;Extended Properties=\"DSN=Excel Files;DBQ=F:\\Владимир\\Учеба\\Мой Диплом\\Ексель документ для Импорта\\Перечень договоров 2006ДляИмпорта.xls;DefaultDir=F:\\Владимир\\Учеба\\Мой Диплом\\Ексель документ для Импорта;DriverId=790;MaxBufferSize=2048;PageTimeout=5;\";Initial Catalog=:\\Владимир\\Учеба\\Мой Диплом\\Ексель документ для Импорта\\Перечень договоров 2006ДляИмпорта"); //подключаем требуемый Excel файл

ADOQuery1->SQL->Clear();

ADOQuery1->SQL->Add("Select * from [Техпер$]");

ADOQuery1->Active = true;

// выгружаем данные из Excel

Edit1->Visible=false;

Edit2->Visible=false;

Edit3->Visible=false;

Edit4->Visible=false;

Edit5->Visible=false;

Edit6->Visible=false;

Edit7->Visible=false;

Edit8->Visible=false;

Edit9->Visible=false;

Edit10->Visible=false;

Edit11->Visible=false;

Edit12->Visible=false;

Edit13->Visible=false;

Edit14->Visible=false;

Edit15->Visible=false;

Edit16->Visible=false;

Edit17->Visible=false;

Edit18->Visible=false;

Edit19->Visible=false;

DateTimePicker1->Visible=false;

DateTimePicker2->Visible=false;

DateTimePicker3->Visible=false;

}

//--------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

Close();

}

//--------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)

{

ADOQuery3->SQL->Clear();

ADOQuery3->SQL->Add("DELETE FROM perev");

//удаляем все поля таблицы perev

ADOQuery3->Prepared = true;

ADOQuery3->ExecSQL();

ADOQuery2->SQL->Clear();

ADOQuery2->SQL->Add("Insert into perev (Название_орг, Договор, Сотрудники, Адрес, Телефон, Наименование, Срок_работ, Условие, Сумма) values (:org, :dog, :sotrud, :adres, :tel, :naimen, :srok, :usl, :summa)"); //вставляем данные из Excel в таблицу perev

while(!ADOQuery1->Eof){

ADOQuery2->Parameters->ParamByName("org")->Value=ADOQuery1->Fields->Fields[0]->Value;

ADOQuery2->Parameters->ParamByName("dog")->Value=ADOQuery1->Fields->Fields[1]->Value;

ADOQuery2->Parameters->ParamByName("sotrud")->Value=ADOQuery1->Fields->Fields[2]->Value;

ADOQuery2->Parameters->ParamByName("adres")->Value=ADOQuery1->Fields->Fields[3]->Value;

ADOQuery2->Parameters->ParamByName("tel")->Value=ADOQuery1->Fields->Fields[4]->Value;

ADOQuery2->Parameters->ParamByName("naimen")->Value=ADOQuery1->Fields->Fields[5]->Value;

ADOQuery2->Parameters->ParamByName("srok")->Value=ADOQuery1->Fields->Fields[6]->Value;

ADOQuery2->Parameters->ParamByName("usl")->Value=ADOQuery1->Fields->Fields[7]->Value;

ADOQuery2->Parameters->ParamByName("summa")->Value=ADOQuery1->Fields->Fields[8]->Value;

//выгрузка всех данных из Excel в поля таблицы perev

ADOQuery2->Prepared = true;

ADOQuery2->ExecSQL();

ADOQuery1->Next();

}

ADOQuery6->ExecSQL();

// парсинг значений таблицы perev, заполнение полей таблицы TPO

ADOQuery4->Open();

while(!ADOQuery4->Eof)

{

if (DateToStr(DateTimePicker1->Date)!= "01.01.2005")

{//Формируем дату правильного формата для отправки на сервер

DataRoch = " ";

DataRoch = FormatDateTime("yyyymmdd",DateTimePicker1->Date);

}

if (DateToStr(DateTimePicker2->Date)!= "01.01.2005")

{//Формируем дату правильного формата для отправки на сервер

DataRoch1 = " ";

DataRoch1 = FormatDateTime("yyyymmdd",DateTimePicker2->Date);

}

if (DateToStr(DateTimePicker3->Date)!= "01.01.2005")

{//Формируем дату правильного формата для отправки на сервер

DataRoch2 = " ";

DataRoch2 = FormatDateTime("yyyymmdd",DateTimePicker3->Date);

}

ADOQuery5->SQL->Text="Exec DobVstavkaT '"+Edit1->Text.Trim() + "','"+Edit2->Text.Trim() + "','"+Edit3->Text.Trim() + "','"+Edit4->Text.Trim() + "','"+Edit5->Text.Trim() + "','"+Edit6->Text.Trim() + "','"+Edit7->Text.Trim() + "','"+Edit8->Text.Trim() + "','"+Edit9->Text.Trim() + "','"+Edit10->Text.Trim() + "','"+Edit11->Text.Trim() + "','"+Edit12->Text.Trim() + "','"+Edit13->Text.Trim() + "','"+Edit14->Text.Trim() + "','"+Edit15->Text.Trim() + "','"+DataRoch + "','"+DataRoch1 + "','"+DataRoch2 + "','"+Edit16->Text.Trim() + "','"+Edit17->Text.Trim() + "','"+Edit18->Text.Trim() + "','"+Edit19->Text.Trim() + "'";

ADOQuery5->ExecSQL();

//распределение значений из таблицы TPO по всем таблицам БД

DateTimePicker1->Date=ADOQuery4->FieldByName("дата_закл")->AsDateTime;

DateTimePicker2->Date=ADOQuery4->FieldByName("дата_нач")->AsDateTime;

DateTimePicker3->Date=ADOQuery4->FieldByName("дата_зав")->AsDateTime;

Edit1->Text=ADOQuery4->FieldByName("название_орг")->AsString;

Edit2->Text=ADOQuery4->FieldByName("ИНН")->AsString;

Edit3->Text=ADOQuery4->FieldByName("КПП")->AsString;

Edit4->Text=ADOQuery4->FieldByName("ОКПО")->AsString;

Edit5->Text=ADOQuery4->FieldByName("ОГРН")->AsString;

Edit6->Text=ADOQuery4->FieldByName("город")->AsString;

Edit7->Text=ADOQuery4->FieldByName("индекс")->AsString;

Edit8->Text=ADOQuery4->FieldByName("улица")->AsString;

Edit9->Text=ADOQuery4->FieldByName("дом")->AsString;

Edit10->Text=ADOQuery4->FieldByName("офис")->AsString;

Edit11->Text=ADOQuery4->FieldByName("фамилия")->AsString;

Edit12->Text=ADOQuery4->FieldByName("имя")->AsString;

Edit13->Text=ADOQuery4->FieldByName("отчество")->AsString;

Edit14->Text=ADOQuery4->FieldByName("должность")->AsString;

Edit15->Text=ADOQuery4->FieldByName("телефон")->AsString;

Edit16->Text=ADOQuery4->FieldByName("сумма")->AsString;

Edit17->Text=ADOQuery4->FieldByName("условие")->AsString;

Edit18->Text=ADOQuery4->FieldByName("договор")->AsString;

Edit19->Text=ADOQuery4->FieldByName("наименование")->AsString;

//заполнение полей формы

ADOQuery4->Next();

}

}