home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1997 April
/
Chip_1997-04_cd.bin
/
tema
/
602propc
/
disk5
/
data.5
/
WINTIME
/
APPS
/
I_EXPIMP.PGM
< prev
next >
Wrap
Text File
|
1996-12-03
|
18KB
|
453 lines
Include
procedure DoStringu(str : string[10];cis : short);
{**************************************}
begin
if patrs[cis] <> '' then begin
StrInsert(str,SQLinsert,ukaz1);
ukaz1 := ukaz1+StrLength(str);
StrInsert(",",SQLinsert,ukaz1);
ukaz1 := ukaz1+1;
ukaz2 := ukaz2+StrLength(str)+1;
StrInsert(patrs[cis],SQLinsert,ukaz2);
ukaz2 := ukaz2+StrLength(patrs[cis]);
StrInsert(",",SQLinsert,ukaz2);
ukaz2 := ukaz2+1;
end;
end;
procedure AkceImport;
{**************************************}
{provede naΦtenφ dat z DBF souboru a p°idßnφ do tabulky;
popis p°enosu si u₧ivatel definuje v pohledu sßm}
var
ss : string[80];
f : file;
znak : char;
znak32 : array[0..32] of char;
j,i : integer;
pocetAtr : integer;
pomstr : string[3];
pozice : short;
err : boolean;
recins : integer;
spopis : string[20];
begin
ss := 'C:\*.DBF';
if Select_file(0,ss) then
if (StrCopy(ss,StrLength(ss)-2,3)='DBF') or (StrCopy(ss,StrLength(ss)-2,3)='dbf') then begin
Reset(f,ss); // otev°enφ DBF souboru
Set_status_text("NaΦφtßm hlaviΦku DBF souboru");
for i := 0 to 31 do begin
Read(f,znak);
znak32[i] := znak;
end; // zjiÜt∞nφ poΦtu field∙ z hlaviΦky souboru
pocetAtr := Trunc((256*Ord(znak32[9])+Ord(znak32[8])-1)/32-1);
for j := 1 to pocetAtr do begin // naΦtenφ jmen a typ∙ field∙ do pole
Set_status_nums(j,pocetAtr);
for i := 0 to 31 do begin
Read(f,znak);
znak32[i] := znak;
end;
pomstr := Ord(znak32[16])<10?"00"+int2str(Ord(znak32[16])):
Ord(znak32[16])<100?"0"+int2str(Ord(znak32[16])):
int2str(Ord(znak32[16]));
pole[j][1] := znak32[11];
pole[j][2] := ' ';
pole[j][3] := pomstr[1];
pole[j][4] := pomstr[2];
pole[j][5] := pomstr[3];
pole[j][6] := ' ';
pole[j][7] := ' ';
pole[j][8] := ' ';
for i := 0 to 10 do
pole[j][i+9] := znak32[i];
pole[j][20] := Chr(0);
end; // j cyklus
Set_status_nums(-1,-1);
Set_status_text("");
expkod := 0;
zrusitAkci := true;
err := false;
spomx := 'Import dat z DBF do skupiny: '+nazskup;
Open_view("*Pdbf", no_redir,0,0,0,id_dbf);
hlist := GetDlgItem(id_dbf,3); // zjiÜt∞nφ handle seznamu
repeat Peek_message until id_dbf=0;
if not zrusitAkci then begin
if not Find_object('__TEMP__',categ_table,pozice) then SQL_execute('DROP TABLE __TEMP__');
Set_status_text('P°enos dat z DBF souboru do pomocnΘ tabulky..');
if not Data_import('__TEMP__',true,ss,4,expkod) then begin // import DBF do pomocnΘ tabulky
Info_box('Chyba','Data_import');
err := true;
end
else begin // posklßdßnφ SQL p°φkazu INSERT z popisu v pohledu
SQLinsert := 'INSERT INTO Tfirma(skupina,) SELECT '+Int2str(skup)+', FROM __TEMP__';
ukaz1 := 28; ukaz2 := 39;
DoStringu('jmeno',1);
DoStringu('prijmeni',2);
DoStringu('titul',3);
DoStringu('funkce',4);
DoStringu('firma',5);
DoStringu('ulice',6);
DoStringu('mesto',7);
DoStringu('psc',8);
DoStringu('stat',9);
DoStringu('telefon',10);
DoStringu('fax',11);
DoStringu('mail',12);
DoStringu('ico',13);
DoStringu('dic',14);
DoStringu('banka',15);
StrDelete(SQLinsert,ukaz1-1,1); // umazßnφ Φßrek za poslednφmi atributy
StrDelete(SQLinsert,ukaz2-2,1);
Set_status_text('P°enos dat z pomocnΘ tabulky do tabulky firem...');
Enable_index(Tfirma,-1,false);
if SQL_execute(SQLinsert) then begin // p°enos dat z pom. tabulky do Tfirma
err := true;
Info_box('Chyba SQL','import dat');
end;
Set_status_text('Vybudovßnφ index∙...');
Enable_index(Tfirma,-1,true);
if SQL_execute('DROP TABLE __TEMP__') then begin // zruÜenφ pomocnΘ tabulky
err := true;
Info_box('Chyba SQL','mazßnφ tabulky');
end;
if not Close_cursor(curmain) then begin // zav°enφ a znovuotev°enφ hlavnφho kurzoru, aby se promφtly zm∞ny
ss := 'SELECT * FROM Tfirma WHERE skupina='+Int2str(skup);
if Open_sql_cursor(curmain,ss) then Signalize;
end;
if id > 0 then Reset_view(id,-1,5); // p°ekreslenφ pohled∙
if id_sez > 0 then Reset_view(id_sez,-1,5);
Set_status_text('');
if not err then begin
if YesNo_box('P°enos zßznam∙','P°enos prob∞hl OK.'#10'Chcete tento import ulo₧it pro p°φpadnΘ dalÜφ pou₧itφ?') then begin
recins := Append(Tinserty);
if recins <> -1 then begin
with Tinserty[recins] do begin
soubor := ss;
insertstr[0,StrLength(SQLInsert)] := SQLInsert;
cisloi := recins;
datum := Today;
spopis := '';
Input_box('Zadejte jmΘno importu',spopis,20);
popis := spopis;
kodi := expkod;
end;
Uninst_table(Tinserty);
end
else Info_box('Ulo₧enφ importu','Nepoda°ilo se ulo₧it import!');
end;
end
else Info_box('Import','Akce neprob∞hla ·sp∞Ün∞!');
end; // else
end; // zrusitAkci;
end else Info_box('Chyba','Vybran² soubor nenφ DBF soubor!');
Close(f);
end;
procedure AutoImport(cis : short);
{**************************************}
{import dat podle d°φve ulo₧enΘho popisu}
var
unt : untyped;
recins2 : integer;
pozice : short;
err : boolean;
ss : string[100];
begin
err := false;
unt := cis;
recins2 := Look_up(Tinserty,'cisloi',unt);
if recins2 <> -1 then
with Tinserty[recins2] do begin
SQLInsert := insertstr[0,insertstr#];
expkod := kodi;
if not Find_object('__TEMP__',categ_table,pozice) then SQL_execute('DROP TABLE __TEMP__');
Set_status_text('P°enos dat z DBF souboru do pomocnΘ tabulky...');
if not Data_import('__TEMP__',true,soubor,4,expkod) then begin // import DBF do pomocnΘ tabulky
Info_box('Chyba','Data_import');
err := true;
end
else begin
Enable_index(Tfirma,-1,false);
Set_status_text('P°enos dat z pomocnΘ tabulky do tabulky firem...');
if SQL_execute(SQLinsert) then begin // p°enos dat z pom. tabulky do Tfirma
err := true;
Info_box('Chyba SQL','import dat');
end;
Set_status_text('Vybudovßnφ index∙...');
Enable_index(Tfirma,-1,true);
if SQL_execute('DROP TABLE __TEMP__') then begin // zruÜenφ pomocnΘ tabulky
err := true;
Info_box('Chyba SQL','mazßnφ tabulky');
end;
if not Close_cursor(curmain) then begin // zav°enφ a znovuotev°enφ hlavnφho kurzoru, aby se promφtly zm∞ny
if vsechnysk then ss := 'SELECT * FROM Tfirma'
else ss := 'SELECT * FROM Tfirma WHERE skupina='+Int2str(skup);
Open_sql_cursor(curmain,ss);
end;
if id > 0 then Reset_view(id,-1,5); // p°ekreslenφ pohled∙
if id_sez > 0 then Reset_view(id_sez,-1,5);
Set_status_text('');
if not err then Info_box('Provedeno','Import prob∞hl OK')
else Info_box('Import','Akce neprob∞hla ·sp∞Ün∞!');
end;
end;
end;
procedure ImportDBF;
{**************************************}
{pouze pro DB_ADMINa}
var
pocet : integer;
id_imp : window_id;
begin
if myName <> 'DB_ADMIN' then Info_box('Nelze',' Import dat m∙₧e provΘst pouze sprßvce databßze!')
else
if vsechnysk then Info_box('Nelze','P°ed importem musφte mφt vybranou jednu konkrΘtnφ skupinu!')
else begin
Rec_cnt(Tinserty,pocet);
if pocet > 0 then begin
if YesNo_box('Import dat','Chcete pou₧φt d°φve definovan² import dat?') then
begin
zrusitAkci := true;
Open_view('*PImport',no_redir,0,0,0,id_imp);
repeat Peek_message until id_imp=0;
if not zrusitAkci then AutoImport(cis_imp);
end
else AkceImport;
end
else AkceImport;
end; //nenφ skupina
end;
procedure PrenestZeSeznamu(kam : short);
{**************************************}
{procedura volanß tlaΦφtky <-- z pohledu pro popis importu}
var
ind : integer;
spom : string[33];
u : untyped;
begin
ind := Send_message(hlist,1033,0,0); // zjiÜt∞nφ vybranΘ polo₧ky seznamu
if ind = -1 then Info_box('Nelze','Nenφ vybrßna ₧ßdnß polo₧ka DBF!')
else begin
spom := Get_view_item(id_dbf,kam);
if spom <> '' then spom := spom+"+"" ""+"+StrCopy(pole[ind+1],9,10)
else spom := StrCopy(pole[ind+1],9,10);
u := spom;
Set_item_value(id_dbf,0,kam,u); // zapsßnφ jmΘna do editaΦnφho pole a do prom∞nnΘ
end;
end;
procedure Export;
{**************************************}
{Vyexportuje zßznamy pro pou₧itφ v jinΘ databßzi. Aby se vyexportovaly
i hodnoty multiatributu (pro DBF a CSV), je tabulka nahrazena prom. kurzorem,
v n∞m₧ jsou prvnφ dv∞ slo₧ky multiatributu rozepsßny.}
var
id_exp : window_id;
cesta : string[20];
curexp : cursor;
pomstr : string[500];
dotazex : string[300];
begin
expkod := 0;
expset := 0;
zrusitAkci := true;
Open_view("*Pexport",no_redir,0,0,0,id_exp);
repeat Peek_message until id_exp = 0;
if not zrusitAkci then begin
case exptype of
0 : cesta := 'C:\*.TDT';
2 : cesta := 'C:\*.CSV';
4 : cesta := 'C:\*.DBF';
end;
if Select_file(0,cesta) then begin
Set_cursor(1);
Set_status_text("Probφhß export dat, prosφm Φekejte...");
if expset = 0 then begin // export celΘ skupiny
if vsechnysk then begin
if exptype = 0 then // export ve formatu WinBase
pomstr := "SELECT * FROM Tfirma ORDER BY cislo"
else
pomstr := "SELECT cislo,skupina,firma,firma2,jmeno,prijmeni,titul,muz,funkce,ulice,mesto,psc,"
"telefon[0] AS tel1,telefon[1] AS tel2,fax[0] AS fax1,fax[1] AS fax2,mail[0] AS mail1,"
"mail[1] AS mail2,stat,ico,dic,banka[0] AS bank1,banka[1] AS bank2,prep1,prep2,prep3,"
"prep4,prep5,prep6,prep7,prep8,pozn FROM Tfirma ORDER BY cislo"
end
else begin
if exptype = 0 then begin
pomstr := "SELECT * FROM Tfirma WHERE skupina= ORDER BY cislo";
StrInsert(Int2str(skup),pomstr,StrLength(pomstr)-14);
end
else begin
pomstr := "SELECT cislo,skupina,firma,firma2,jmeno,prijmeni,titul,muz,funkce,ulice,mesto,psc,"
"telefon[0] AS tel1,telefon[1] AS tel2,fax[0] AS fax1,fax[1] AS fax2,mail[0] AS mail1,"
"mail[1] AS mail2,stat,ico,dic,banka[0] AS bank1,banka[1] AS bank2,prep1,prep2,prep3,"
"prep4,prep5,prep6,prep7,prep8,pozn FROM Tfirma WHERE skupina= ORDER BY cislo";
StrInsert(Int2str(skup),pomstr,StrLength(pomstr)-14);
end;
end;
if Open_sql_cursor(curexp,pomstr) then Signalize
else begin
if not Data_export(curexp,categ_dircur,cesta,exptype,expkod) then Signalize
else Info_box('Provedeno','Export prob∞hl OK');
Close_cursor(curexp);
end;
end else begin // export vybran²ch zßznam∙
if (Active_view=id) or (Active_view=id_sez) then begin
Get_fcursor(Active_view,curexp,nil);
end else curexp := curmain; // urΦit∞ nenφ polo₧en QBE dotaz
if not Data_export(curexp,categ_dircur,cesta,exptype,expkod) then Signalize
else Info_box('Provedeno','Export prob∞hl OK');
end;
Set_status_text("");
Set_cursor(0);
end;
end;
end;
procedure SpocistCislo;
{************************************}
// pro nßsledujφcφ proceduru
var
unt : untyped;
irec,erec : integer;
poslCislo : integer;
begin
if C_max(Tfirma,'cislo','',unt) then begin
Signalize;
end
else begin
poslCislo := unt;
unt := poslCislo+1; // o 1 v∞tÜφ ne₧ nejvyÜÜφ
if Get_view_pos(id,irec,erec) then
Set_item_value(id,irec,54,unt); //zapsßnφ do slo₧ky pohledu ale i do databßze
end;
end;
function PosledniCislo : short;
{************************************}
// klßvesa F4 nebo tlaΦφtko vedle Φφsla
// je-li otev°en pohled Pfirma a dosud nenφ Φφslo, vlo₧φ a zapφÜe
// ji₧ je Φφslo, zeptß se na vlo₧enφ
// nenφ-li otev°en, oznßmφ Φφslo
var
unt : untyped;
id_cd : window_id;
irec,erec : integer;
poslCislo : short;
begin
if (id > 0) and (Active_view = id) then begin // otev°en pohled Pfirma
if (Get_view_item(id,54) <> '') then begin // u₧ je Φφslo zapsßno
if YesNo_box('Otßzka','Chcete opravdu p°epsat ╚φslo zßznamu o firm∞ Φφslem nov²m?') then begin
SpocistCislo;
end;
end else begin // (Get_view_item(id,54) = '') dosud nenφ zapsßno Φφslo
SpocistCislo;
end;
end;
if (id_sez > 0) and (Active_view = id_sez) then begin // oteve°en pohled Pseznam
if C_max(Tfirma,'cislo','',unt) then Signalize
else begin
poslCislo := unt;
unt := poslCislo+1;
Info_box('Neni₧ÜÜφ pou₧itelnΘ Φφslo',int2str(poslCislo+1));
end;
end;
if (id=0) and (id_sez=0) then begin // jako funkce pro import
if C_max(Tfirma,'cislo','',unt) then Signalize
else begin
poslCislo := unt;
unt := poslCislo+1;
PosledniCislo := poslCislo+1;
end;
end;
end;
procedure ImportTDT;
{**************************************}
var
sfile : string[80];
i,rec : integer;
pocetzaz : integer;
id_vs : window_id;
ss : string[100];
begin
Close_all_views;
Close_cursor(curmain);
sfile := 'C:\*.TDT';
if Select_file(0,sfile) then begin
zrusitAkci := true;
if Write_lock_table(Firmakopie) then Info_box('Nelze','Pomocnß tabulka pro import je zamknutß')
else
Open_view('*SkupExp',no_redir,0,0,0,id_vs);
repeat Peek_message until id_vs=0;
if not zrusitAkci then begin
if Delete_all_records(FirmaKopie) then Signalize
else begin
Free_deleted(FirmaKopie);
if not Data_import('FirmaKopie',true,sfile,0,0) then Signalize
else begin
Rec_cnt(FirmaKopie,pocetzaz);
if pocetzaz <> -1 then
for i := 0 to pocetzaz-1 do begin
Set_status_nums(i+1,pocetzaz);
rec := Insert(Tfirma);
if rec <> -1 then begin
Start_transaction;
Tfirma[rec].cislo := PosledniCislo;
Tfirma[rec].skupina := skup;
Tfirma[rec].firma := FirmaKopie[i].firma;
Tfirma[rec].firma2 := FirmaKopie[i].firma2;
Tfirma[rec].ulice := FirmaKopie[i].ulice;
Tfirma[rec].mesto := FirmaKopie[i].mesto;
Tfirma[rec].psc := FirmaKopie[i].psc;
Tfirma[rec].stat := FirmaKopie[i].stat;
Tfirma[rec].muz := FirmaKopie[i].muz;
Tfirma[rec].titul := FirmaKopie[i].titul;
Tfirma[rec].jmeno := FirmaKopie[i].jmeno;
Tfirma[rec].prijmeni := FirmaKopie[i].prijmeni;
Tfirma[rec].funkce := FirmaKopie[i].funkce;
Tfirma[rec].telefon := FirmaKopie[i].telefon;
Tfirma[rec].fax := FirmaKopie[i].fax;
Tfirma[rec].mail := FirmaKopie[i].mail;
Tfirma[rec].banka := FirmaKopie[i].banka;
Tfirma[rec].ico := FirmaKopie[i].ico;
Tfirma[rec].dic := FirmaKopie[i].dic;
Tfirma[rec].pozn := FirmaKopie[i].pozn;
Tfirma[rec].prep1 := FirmaKopie[i].prep1;
Tfirma[rec].prep2 := FirmaKopie[i].prep2;
Tfirma[rec].prep3 := FirmaKopie[i].prep3;
Tfirma[rec].prep4 := FirmaKopie[i].prep4;
Tfirma[rec].prep5 := FirmaKopie[i].prep5;
Tfirma[rec].prep6 := FirmaKopie[i].prep6;
Tfirma[rec].prep7 := FirmaKopie[i].prep7;
Tfirma[rec].prep8 := FirmaKopie[i].prep8;
Commit;
end;
end;
end;
end;
end;
Write_unlock_table(FirmaKopie);
end;
nazskup := Skupiny[skup].nazev;
s2 := 'Skupina: '+nazskup;
s4 := 'P°ehled firem skupiny: '+nazskup;
ss := 'SELECT * FROM Tfirma WHERE skupina='+Int2str(skup);
if Open_sql_cursor(curmain,ss) then Signalize;
Open_view("*Pseznam",curmain,0,0,0, id_sez);
SetWindowText(id_sez,s4);
end;