[ lucky666 @ 16.06.2008. 11:57 ] @
Posto nisam nasao odgovor za moje pitnje na ranijim temama postavicu jos jednu u nizu mojih glupih tema...
Napravio sam bazu koja ima strukturu kao employee.gdb baza koja se isporucuje uz \Delphi...Interesuje me kako mogu putem koda da kopiram podatke iz jedne od tabela baze emloyee u istu tabelu moje baze?
Extra dodatak sam mislio da napravim ...napunim combo svim tabelama baze i klikom na neku od tabela podaci se pojavljuju u gridu,klikom na dugme kopiraju se....?
Kako?pomocu kojih komponenti?kod?Nista ne znam samo znam sta zelim da uradim?
Svaka pomoc imi je dobro dosla!
HVALAsbvvim buducim instruktorima
[ _deran_ @ 16.06.2008. 15:44 ] @
pogledaj http://fbexport.sourceforge.net/
[ lucky666 @ 16.06.2008. 16:13 ] @
@deron Hvala,ali nasao sam fajl fbcopy-1.52 koji nemogu nigde da otvorim.
Ako moze neka konkretnija pomoc?
ZA pocetak me interesuje da li sam na pravom putu,kada mislim da se kopiranje izmedju FB baza vrsi uz pomoc komponente BetchMove?jer ona ima 2 svojstva koja (po mom misljenju) imaju ulogu odredista i izvora destinacion i source?ili gresim? ili je to mozda CRBatchMove?
[ lucky666 @ 17.06.2008. 00:06 ] @
eVo i nekakve verzije koda procedure koju sam napravio za kopiranje podataka medju tabelama.Ne pokazuje gresku,ali ne radi nista.NEznam gde gresim?
Code:

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
//SqlTable 1 je izvorna tabela,a SqlTable 2 je odredisna tabela
for i:=0 to SQLTable1.FieldCount-1 do
begin
SQLTable2.Fields[i]:=SQLTable1.Fields[i];
SQLTable1.Next;
end;
end;
[ Vladica Savić @ 17.06.2008. 12:12 ] @
U sustini mozes da posmatras kao matricu, pustis dve for petlje, koja ce da vrti poziciju vrsta, drugu kolona, i onda uzmes u neku promenjivu vrednost polja na poziciji polje(i,j) iz tabele odakle kopiras, i upises u polje na istom tom mestu u drugoj tabeli u polje(i,j) i to je to :)
[ Vladica Savić @ 17.06.2008. 12:24 ] @
Baci pogled i na ovako nesto
[ lucky666 @ 17.06.2008. 14:10 ] @
@VladaLe Ok neke greske mi pokazuje nikako da se izborim sa njiima
Ma mnogo je ono zakoplikovano moze to malo prostije
[ lucky666 @ 17.06.2008. 14:21 ] @
Kada prekucam onaj kod prebaci mi se samo polje sa indeksom 0,a nepamti mi izmenu?
[ savkic @ 17.06.2008. 17:57 ] @
BatchMove zaboravi, ona radi preko BDEa. Tebi treba jedan kveri koji će učitati podatke i drugi koji će vršiti upis. Otprilike ovako (pišem online pa kod sasvim sigurno nije tačan, ali će ti dati ideju):

Code:

var 
  Sel, Ins: TIBQuery;
begin
  Sel := TIBQuery.Create(nil);
  Ins := TIBQuery.Crete(nil);
  // Sada treba povezati ove dve kveri komponente sa transaction i database komponentama

  Sel.SQL.TEXT := 'SELECT ID, IME, PREZIME FROM TABELA1';
  Ins.SQL.Text := 'INSERT INTO TABELA2 (ID, IME, PREZIME) VALUES (:Id, :Ime, :Prezime)';
  Ins.Prepare;

  Sel.Open;
  while not Sel.Eof do
  begin
    Ins.Params[0] := Sel.FieldByName('ID').AsInteger;
    Ins.Params[1] := Sel.FieldByName('IME').AsString;
    Ins.Params[2] := Sel.FieldByName('PREZIME').AsString;
    Ins.ExecSQL;
    Sel.Next;
  end;

  // Sada treba komitovati transakciju sa kojom je bila povezana Ins tabela.
end;
[ Vladica Savić @ 17.06.2008. 19:55 ] @
Eto, savkic solve the problem once again :)
[ lucky666 @ 18.06.2008. 00:28 ] @
@savkic
@VladaLe
HVALA VAM EXTRA!!!!
Opet nece nisam razumeo (ne znam) kako da se komituje transakcija?
Onaj kod sto ni je Vlada napisao da pogledam ubaci samo 1. polje sa indeksom 0,a kada napisem
Code:

Sour.Next;

Pokazuje greske i blokira
Code:

//sqlQuery1 je destinacija,a SqlQuery2 sors
SQLQuery2.SQL.Add('insert into country (country,currency)values(:country,:currency)');
SQLQuery1.Open;
while not SQLQuery1.Eof do
begin
SQLQuery2.Params[0]:=SQLQuery1.ParamByName('country');
SQLQuery2.Params[1]:=SQLQuery1.ParamByName('currency');
SQLQuery2.ExecSQL;
SQLQuery1.Next;
end;
//a u kveriju1 sam stavio Sql('select * from country')

Pokazuje neku gresku 0 zaustavlja akciju
NE razumem gde gresim?
Ne razumem jel sam ja glup ili je ovo samo meni tesko!!!!
Aj ako Vam nije problem probajte u Delphiju kao to moze da se odradi pa mi pustite sors kod
Znam da sam vise svima dosadio sa glupim pitaanjima,ali ne znam , a niko se nije naucen rodio,PLEASE
THANK YOU!!!!!!!!!!!!!!!!!!!!!!
[ chachka @ 18.06.2008. 00:38 ] @
Savkić ti je lepo napisao da polje čitaš sa FieldByName:
Code:
// savkic
Ins.Params[0] := Sel.FieldByName('ID').AsInteger;

a ti si pogrešno upotrebio ParamByName:
Code:
// lucky666
SQLQuery2.Params[0]:=SQLQuery1.ParamByName('country');
[ savkic @ 18.06.2008. 08:18 ] @
> Pokazuje neku gresku 0 zaustavlja akciju

Moraš naučiti da budeš precizan, ako ne radi šta je to što ne radi, ako dobijaš grešku koju grešku dobijaš (dovoljno je da prekucaš tekst, ne treba slati sliku exceptiona).

> Aj ako Vam nije problem probajte u Delphiju kao to moze da se odradi pa mi pustite sors kod
> Znam da sam vise svima dosadio sa glupim pitaanjima,ali ne znam , a niko se nije naucen rodio,PLEASE

Moje je čvrsto uverenje da početnici moraju sami da otkrivaju, ako ti sad neko napiše gotov kod učiniće ti medveđu uslugu, u osnovi ti ništa nećeš naučiti. Međutim, ako ti provedeš dan, dva pa i nedelju na ovome jednom delu, kada sam uradiš shvatićeš mnogo toga. Samo moraš imati strpljenja i čitati help.
Takođe, knjiga je za tebe obavezna, bilo je ranije više puta reči o knjigama za početnike pa potraži te ranije teme.
BTW, pretpostavljam da ti ovo kopiranje radiš kako bi nešto naučio, moj ti je savet da uradiš nešto konkretno, npr. program za DVD klub, biblioteku i sl.
[ lucky666 @ 18.06.2008. 11:10 ] @
@chachka
kada napisem ovaj kod koji je savkic dao pojavi se greska
Incompatible types 'TParam' and 'String'
>Moje je čvrsto uverenje da početnici moraju sami da otkrivaju, ako ti sad neko napiše gotov kod učiniće ti medveđu uslugu, u osnovi ti ništa nećeš naučiti. Međutim, ako ti provedeš dan, dva pa i nedelju na ovome jednom delu, kada sam uradiš shvatićeš mnogo toga. Samo moraš imati strpljenja i čitati help.
Takođe, knjiga je za tebe obavezna, bilo je ranije više puta reči o knjigama za početnike pa potraži te ranije teme.
@savkic
Ok je to sto me tako savetujes,ali ovaj kod koji meni treba nema u knjizi pa sam ja zato mislio da mi neko postavi kod koji radi,a ja bi ga primenio na sve tabele baze pa bi tako naucio,a ne dobio"medvedju uslugu".Da hocu medvedju uslugu bi uzeo navugator i za 10ak minuta ineo podatke!
>BTW, pretpostavljam da ti ovo kopiranje radiš kako bi nešto naučio, moj ti je savet da uradiš nešto konkretno, npr. program za DVD klub, biblioteku i sl.
Dobro pretpostavljas.Kopiram podatke da bi naucio,a rado bih napravio neku svoju bazu,medjutim pravljenje baza orentaciono znam,a radije bih to vreme utrosio u povezivanju Delphija i baze!
Trazim sors procedure koja je isprobana u Delphiju da bi je primenio na sve tabele ,i tako uvezbavao!
[ chachka @ 18.06.2008. 11:48 ] @
Citat:
lucky666: kada napisem ovaj kod koji je savkic dao pojavi se greska
Incompatible types 'TParam' and 'String'

Tako je, ali ti je Savkić pre koda lepo napisao:
Citat:
savkic: pišem online pa kod sasvim sigurno nije tačan, ali će ti dati ideju
I da ponovim ključne stvari "nije tačan" i "dati ideju". I zaista kod nije tačan, ali se upotreba TParam i TField i TString nalazi u SVAKOJ knjizi za Delphi koja je namenjena početničkom nivou.

Evo zato i od mene savet koji se često može pročitati po ovim forumima - Knjigu u šake! Nažalost koliko god puta da se ovaj savet ponavlja, još ima ljudi koji ga smatraju suvišnim, komplikovanim i nečim što je gubljenje vremena. Ko je još lud i ima vremena da čita 50 strana uvoda? Daj odmah da se prave programi za NASA-u!


Citat:
lucky666: ... ali ovaj kod koji meni treba nema u knjizi pa sam ja zato mislio da mi neko postavi kod koji radi...

Knjige pokrivaju samo uopštene stvari o programiranju, daju smernice i metodologije, daju ideje i načine kako se primenjuju alati.

Pri bavljenju programiranjem ćeš se sresti sa hiljadama problema čija rešenja nisu zapisana u knjigama! Na kraju krajeva, da je sve zapisano u knjigama, nebismo više imali šta da radimo :)

Programiranje nije puko prepisivanje iz knjige, kao što to nije ni jedna oblast ljudskog rada. U tome se ljudi razlikuju od mrava, mravlji posao je zapisan u nekoj njihovoj svetoj knjizi gena i oni se po njoj ponašaju i rade. Kao što sam već rekao - posao programiranja nije zapisan u knjigama!

Programiranje se sastoji u mogućnosti da se rešenje problem sagleda i razloži na bazne korake, koji se onda povezuju u složenije postupke koji na kraju dovode do rešenja. Glavni alat u programiranju je LOGIKA!

Citat:
lucky666: Trazim sors procedure koja je isprobana u Delphiju da bi je primenio na sve tabele ,i tako uvezbavao!

Počni da razmišljaš kako da rešiš problem samostalno, a ne da uvežbavaš prepisivanje tuđeg koda! Tolkin nikada nebi napisao remek knjigu "Gospodar prstenova" da je uvežbavao prepisivanje Šekspirovih dela!

[Ovu poruku je menjao chachka dana 18.06.2008. u 13:01 GMT+1]
[ lucky666 @ 18.06.2008. 12:32 ] @
Svi ti saveti su sper,daleko od toga da sam protivnik citanja knjiga,citam ih.
Za ovaj problem ja imam iddeeju.Radi se preko petlje ,treba mi izvorni i odredisni skup podataka,....ali ne znam kako da je sprovedem u delo,pa za ovih par dana sam napisao toliko koda da bi k njiga u kojoj bi se on ovjavio bila oko2000 strana,a resenja nema,i ne znam kako cu do njega doci....
A ja tako najbolje ucim prepisivajuci kodove i menjajuci ih na svoj nacin...
Pa pre 7 dana sam stavio temu u ib/fb nisam pojma imao da pisemm baze u medjuvrenu sam napisao 2 prepisane i jednu svioju kopiju employee.gdb baze.Slazem se da nije cilj prepisivati,ali kada jednom vidim sta i kako se ispravno radi nije tesko mozgati i prepravljati.....
Proramiranje ti je kao matematika kada si ucio sabiranje da ti niko nije rekao da je 2+2=4 da si ti mozgao i dolazio do zakljucka da je 2+2=5 nikada ne bi znao mnozenjeZnam ja da je svrha programiranja logika i mozak ali ako nemas pravilnu logiku aniko ti ne pomogne dzabe ti od mozganja vrtis se u beskonacnoj petlji problema a kraj se ne vidi
A dobro ako je taj sors toliko "tesko"napisati da radi...
[ lucky666 @ 18.06.2008. 13:03 ] @
Citat:
Code:
 @savkic
var 
  Sel, Ins: TIBQuery;
begin
  Sel := TIBQuery.Create(nil);
  Ins := TIBQuery.Crete(nil);
  // Sada treba povezati ove dve kveri komponente sa transaction i database komponentama

  Sel.SQL.TEXT := 'SELECT ID, IME, PREZIME FROM TABELA1';
  Ins.SQL.Text := 'INSERT INTO TABELA2 (ID, IME, PREZIME) VALUES (:Id, :Ime, :Prezime)';
  Ins.Prepare;

  Sel.Open;
  while not Sel.Eof do
  begin
    Ins.Params[0] := Sel.FieldByName('ID').AsInteger;
    Ins.Params[1] := Sel.FieldByName('IME').AsString;
    Ins.Params[2] := Sel.FieldByName('PREZIME').AsString;
    Ins.ExecSQL;
    Sel.Next;
  end;

  // Sada treba komitovati transakciju sa kojom je bila povezana Ins tabela.
end;


iz koda koji si dao dolazi moj zakljucak dda se radi sa Interbase komponentama,ali moja baza je pisana u firebird ,ima ekstenziju .fdb pa me interesuje neka pomoc kao bi mogao da uradi kopiranje uz pomoc DbExpresss komponenti?
[ chachka @ 18.06.2008. 13:12 ] @
Citat:
lucky666: ... pa za ovih par dana sam napisao toliko koda da bi k njiga u kojoj bi se on ovjavio bila oko2000 strana,a resenja nema,i ne znam kako cu do njega doci....

Verujem ti ja, ali da li znaš za jednu anegdotu sa svetskim prvakom u šahu Jose Raul Capablanca-om?

Jednom prilikom su ga pitali koliko poteza vidi unapred. Odgovorio je: Jedan, ali najbolji!

[ lucky666 @ 18.06.2008. 14:36 ] @
Zanimljiva anekdota
Nego kako ja da resim problem?
Jel moze preko Dbexpress?
[ savkic @ 18.06.2008. 16:18 ] @
> Verujem ti ja, ali da li znaš za jednu anegdotu sa svetskim prvakom u šahu Jose Raul Capablanca-om?
> Jednom prilikom su ga pitali koliko poteza vidi unapred. Odgovorio je: Jedan, ali najbolji!

Meni je u glavi:

Pošto je neki anonimus pobedio poznatog šahistu (možda i Kapablanku), pitali ga koliko poteza vidi unapred,
"jedan"
a Vi, "pa tako devet, deset".
Kako to da neko ko vidi samo jedan potez pobedi onoga ko vidi deset? "Da, ali ja vidim najbolji potez!" odgovori anonimus.

@lucky
> iz koda koji si dao dolazi moj zakljucak dda se radi sa Interbase komponentama,ali moja baza je pisana u firebird ,ima ekstenziju .fdb pa
> me interesuje neka pomoc kao bi mogao da uradi kopiranje uz pomoc DbExpresss komponenti?

IBX radi i sa FB bazama. Kako raditi sa DBX potraži u ranijim porukama. Savet koji ti mogu dati je pogledaj Params u helpu i pogledaj Fields u helpu. I naravno pogledaj poglavlje o bazama, sasvim sigurno sadrži deo o parametrima i poljima.
[ lucky666 @ 19.06.2008. 00:17 ] @
DOSAO SAM DO pribliznog resenja
Evo koda koji kopira podatke ,treba mi malena sitnica,kako da ih zapamtim da se posle vracanja u "normalan"mod delphija ne brisu?
Code:

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
f:TField;
begin
try
SimpleDataSet1.Open;
while not SimpleDataSet1.Eof do
begin
SimpleDataSet2.Insert;
for i:=0 to SimpleDataSet1.FieldCount-1 do  //prolazimo kroz sva polja izvornog dataseta
begin
f:=SimpleDataSet2.FindField(SimpleDataSet1.Fields[i].FieldName);
if f<>nil then //provera da li polje iz izvornog dataseta postoji u ciljnoj
f.Value:=SimpleDataSet1.Fields[i].Value;
end;
SimpleDataSet2.Post;
SimpleDataSet1.Next;
end;
finally
SimpleDataSet1.Close;
end;
end;
//kopiraju se podaci iz SimpleDataSet1 u SimpleDataSet2

Kako da ih zapamti baza.Sta mi ne dostaje?
[ chachka @ 19.06.2008. 00:51 ] @
TSimpleDataSet koristi kešovanje promena u memoriji koje se prosleđuju bazi tek nakon ApplyUpdates komande, a ako se ta komanda ne sprovede keš se odbacuje. Dakle pre finally bloka treba staviti:
Code:
SimpleDataSet2.ApplyUpdates(0);

[ lucky666 @ 19.06.2008. 13:17 ] @
HVALA charcka
Jos nesto me vunni?
Kod kojim se menjaju tabele uz pomoc comboobxa,dakle zelim ovim programom da napunim sve tablel baze
Code:

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
with SourceDataSet do
try
 Close;
begin
DataSet.CommandText:='';
DataSet.CommandText:=ComboBox1.Text;
end;
finally
Open;
end;
with DestinationDataSet do
try
Close;
begin

DataSet.CommandText:='';
DataSet.CommandText:=ComboBox1.Text;

end;
finally
Open;
end;
end;

Kada izvrsim dogadjaj pojavi se greska :
Project kopi.exe reice exeption class EDatabaseError with message:'Data type unknown Clien Sql dialect does not support reference to beginit data type
Neznam kako da prebrodim ovu gresku,dok nisam napisao kod
Code:

SimpleDataSet2.ApplyUpdates(0); 
mogao je da 1 izvrsi dogadjaj i onda se pojavi poruka,a od kkaada sam napisao gore navedenu liniju nijednom...Znam da ta linija mu ne smeta i da nije dobro sto ne moze uvek da se izvrsi?