Kako pomocu Delphija i Access baze otvoriti Quuery napravljen u Access,i da se rezultat pokaze u dbgridu na formi u Delphiju...
Delphi and MsAccess
Zaključano
Zakačeno
Imas u jednoj od top tema ovde kako koristiti ADO u Delphiju, pogledaj i tu ces naci kako se uvezati na Access.
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.
How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Upravo tako, imaš negdje u top temama, imaš i početničku školu Žarka Gajića na: http://delphi.about.com/od/database/a/adodelphi.htm
Potpis
God is real unless is declared as integer.
A da li mogu da pokrenem proceduru napravljenu u access iz delphija...
Pogledaj StoredProc, zaboravih kako to ide sa ADO-om.
Pozz
Pozz
Da,pogledao sam,ali slabo mi to nesto ide...Imam u access uradjen program za racunanje godisnjeg odmora,tj koliko ko ima odmora....Meni treba kod koji racuna to,dakle treba da mi razlika od danasnjeg dana do dana unosa,i plus staz do datuma unosa,s tim sto su mi danasnji dan,i dan unosa u formatu datuma,ali staz mi je u stringu,kao recimo 010225,sto pokazuje 1 godinu,2 meseca i 25 dana...
Koji deo je zapeo?
Pozz
Pozz
Kako da napravim sledece:
Imam polje koje mi je pretraga po prezimenu radnika,i to mi sljaka,ukucam pocetna slova i izbaci mi listu,gde sa dvoklikom izaberem nekoga,i ti podaci ostanu na formi...pored opstih podataka,imam jedan textbox,koji mi oznacava staz radnika u string formatu,recimo 1g,1m,21dan...Kako da dobijem taj podatak,cim izaberem radnika?U bazi imam polje string koje oznacava staz do trenutka unosa radnika,negde 2009 godine,kada je pravljen program....Dakl taj kod treba da sabere taj staz do unosa + do danasnjeg datuma i minus broj dana neplacenog odsustva...I da sve to bude u string formatu,dan,mesec ,godina...
Imam polje koje mi je pretraga po prezimenu radnika,i to mi sljaka,ukucam pocetna slova i izbaci mi listu,gde sa dvoklikom izaberem nekoga,i ti podaci ostanu na formi...pored opstih podataka,imam jedan textbox,koji mi oznacava staz radnika u string formatu,recimo 1g,1m,21dan...Kako da dobijem taj podatak,cim izaberem radnika?U bazi imam polje string koje oznacava staz do trenutka unosa radnika,negde 2009 godine,kada je pravljen program....Dakl taj kod treba da sabere taj staz do unosa + do danasnjeg datuma i minus broj dana neplacenog odsustva...I da sve to bude u string formatu,dan,mesec ,godina...
Tesko je tu voditi staz u danima, najlakse da vodis u godinama, mesecima i danima pa da svaki od njih dodajes odvojeno dane, mesece i godine ili oduzmes. Verovatno je najbolje da vidis kako se to vodi u PIO fondu i da primenis isti taj algoritam.
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.
How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Nisam se dobro izrazio...meni i treba u godinama,mesecima i danima...samo mi pretstavlja problem ovo polje u stringu u bazi.....Ako moze za pocetak kako dane prebaciti u d,m,g...
Dakle iz stringa "1g,1m,21dan" treba da izvuces pojedinačne podatke?
Sa ovim gore funkcijama možeš to lako završiti, npr:
Code:
function StrToken(var S: string; Separator: Char): string;
var
I: Integer;
begin
I := Pos(Separator, S);
if I <> 0 then
begin
Result := Copy(S, 1, I - 1);
Delete(S, 1, I);
end
else
begin
Result := S;
S := '';
end;
end;
function StringToInteger(AValue: string): Int64;
const
AnsiDecDigits = ['0'..'9'];
AnsiSigns = ['-', '+'];
var
i, b: Integer;
begin
b := 1;
for i := 1 to Length(AValue) do
begin
{$IFDEF DELPHIXE_UP}
if CharInSet(AValue[i], AnsiDecDigits) or ((b = 1) and CharInSet(AValue[i], AnsiSigns)) then
{$ELSE}
if (AValue[i] in AnsiDecDigits) or ((b = 1) and (AValue[i] in AnsiSigns)) then
{$ENDIF}
begin
AValue[b] := AValue[i];
Inc(b);
end;
end;
SetLength(AValue, b - 1);
Val(AValue, Result, b);
end;
function StrToken(var S: string; Separator: Char): string;
var
I: Integer;
begin
I := Pos(Separator, S);
if I <> 0 then
begin
Result := Copy(S, 1, I - 1);
Delete(S, 1, I);
end
else
begin
Result := S;
S := '';
end;
end;
function StringToInteger(AValue: string): Int64;
const
AnsiDecDigits = ['0'..'9'];
AnsiSigns = ['-', '+'];
var
i, b: Integer;
begin
b := 1;
for i := 1 to Length(AValue) do
begin
{$IFDEF DELPHIXE_UP}
if CharInSet(AValue[i], AnsiDecDigits) or ((b = 1) and CharInSet(AValue[i], AnsiSigns)) then
{$ELSE}
if (AValue[i] in AnsiDecDigits) or ((b = 1) and (AValue[i] in AnsiSigns)) then
{$ENDIF}
begin
AValue[b] := AValue[i];
Inc(b);
end;
end;
SetLength(AValue, b - 1);
Val(AValue, Result, b);
end;
Sa ovim gore funkcijama možeš to lako završiti, npr:
Code:
[var
Staz, Temp: string;
God, Mes, Dan: Integer;
begin
Staz := '1g,1m,21dan';
Temp := StrToken(Staz, ',');
God := StringToInteger(Temp);
Temp := StrToken(Staz, ',');
Mes := StringToInteger(Temp);
Dan := StringToInteger(Staz);
end;
[var
Staz, Temp: string;
God, Mes, Dan: Integer;
begin
Staz := '1g,1m,21dan';
Temp := StrToken(Staz, ',');
God := StringToInteger(Temp);
Temp := StrToken(Staz, ',');
Mes := StringToInteger(Temp);
Dan := StringToInteger(Staz);
end;
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.
How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Njemu je u formatu ggmmdd, znači ovako nekako:
itd.
Makar ovo nije dobar pristup, ako je već tako napravljeno onda nemaš drugih opcija. Nemoj zaboraviti na kontrole, da netko ne bi ubacio 11011 umjesto 011011...
Code:
var
iGod, iMj, i Dan: integer;
begin
iGod := Copy(sString, 0, 2)
var
iGod, iMj, i Dan: integer;
begin
iGod := Copy(sString, 0, 2)
itd.
Makar ovo nije dobar pristup, ako je već tako napravljeno onda nemaš drugih opcija. Nemoj zaboraviti na kontrole, da netko ne bi ubacio 11011 umjesto 011011...
Potpis
F
Imam funkciju za racunanje razlike u datumima,i to u formatu godine,meseci i dani(i to bas ovako je u bazi,010101,1 godina,1 mesec i 1 dan).meni treba da ovoj razlici u datumima,koju imam,u formatu g,m,d...dodam string iz baze,ovo 010101.....Ne znam da li sam jasan....
Ne mozes sabirati stringove, staz koji ti je u stringu pretvori u normalan oblik (integer vrednosti) i onda primeni sabiranje.
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.
How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Imam proceduru za razliku izmedju dva datuma...to je ova....
procedure DateDiff(DateFrom, DateTo: TDateTime;
var Years, Months, Days: Integer);
var
Temp: TDateTime;
i: Integer;
begin
Years := 0;
Months := 0;
Days := 0;
i := 0;
Temp := DateFrom;
while Temp <= DateTo do
begin
Inc(i);
Temp := IncMonth(DateFrom, i);
end;
Years := i div 12;
Months := i mod 12;
// now this depends on what you want here..
// this will return number of whole days counting from time part of DateFrom
Days := Trunc(DateTo - IncMonth(Temp, -1));
// if you need days counted based on midnight...
// e.g. from Jan/1/2000 23:59 to Jan/2/2000 00:01 -> difference 1 day..
{Days := Trunc(DateTo) - Trunc(IncMonth(Temp, -1));}
end;
E,sada meni treba da na ovu razliku,koja je u g,m,d...dodam field koji je u stringu....
Na formu ,tj njegov event...sam stavio ovaj deo,gde pozivam ovu proceduru
datediff(datumunosa,danas,years,months,days);
frmgodisnjiodmori.Edit5.Text := IntToStr(years) + 'g' + IntToStr(Months) + 'm' + IntToStr(days) + 'd';
Gde na ove,years,months i days da dodam moje polje 010101....
Znam da ide integer i to nesto tipa left(string,0,2)...ali kako i gde da ga dodam postojecoj razlici....
procedure DateDiff(DateFrom, DateTo: TDateTime;
var Years, Months, Days: Integer);
var
Temp: TDateTime;
i: Integer;
begin
Years := 0;
Months := 0;
Days := 0;
i := 0;
Temp := DateFrom;
while Temp <= DateTo do
begin
Inc(i);
Temp := IncMonth(DateFrom, i);
end;
Years := i div 12;
Months := i mod 12;
// now this depends on what you want here..
// this will return number of whole days counting from time part of DateFrom
Days := Trunc(DateTo - IncMonth(Temp, -1));
// if you need days counted based on midnight...
// e.g. from Jan/1/2000 23:59 to Jan/2/2000 00:01 -> difference 1 day..
{Days := Trunc(DateTo) - Trunc(IncMonth(Temp, -1));}
end;
E,sada meni treba da na ovu razliku,koja je u g,m,d...dodam field koji je u stringu....
Na formu ,tj njegov event...sam stavio ovaj deo,gde pozivam ovu proceduru
datediff(datumunosa,danas,years,months,days);
frmgodisnjiodmori.Edit5.Text := IntToStr(years) + 'g' + IntToStr(Months) + 'm' + IntToStr(days) + 'd';
Gde na ove,years,months i days da dodam moje polje 010101....
Znam da ide integer i to nesto tipa left(string,0,2)...ali kako i gde da ga dodam postojecoj razlici....
izmenjeno 1 put, poslednji put Milan Milosevic 08.07.2015. u 17:55
Izmene poruke
- Milan Milosevic08.07.2015. u 17:55zapis iz teksta poruke
Unit DateUtils ima veliki broj funkcija za rad sa DataTime podatcima.
Nema potrebe da pravis svoje.
Dakle primeni prvo pristup koji je dao captPicard
da string konvertujes u word uz malu izmenu
Nema potrebe da pravis svoje.
Dakle primeni prvo pristup koji je dao captPicard
da string konvertujes u word uz malu izmenu
Code:
var
sgod,smes,sdan:String;
Godina,mesec,dan,ProtekloDana:Word;
Dt:TDatetime;
begin
sgod := Copy(sString, 1, 2);
smes := Copy(sString, 3, 2);
sdan := Copy(sString, 5, 2);
Godina:=Strtoint(sgod);
mesec:=Strtoint(smes);
dan:=Strtoint(sdan);
if Godina > 50 then Godina := 1900+Godina
else
Godina := 2000+Godina; //ako je posle 2000 te
//EncodeDateTime za prevodenje podatke u Tdatatime
Dt:=EncodeDateTime(Godina,mesec,dan,0,0,0,0);
ProtekloDana:=DaysBetween(now,Dt); // odreduje broj dana izmedu sadacnjeg dana i dana iz stringa sString koji sadrzi datum iz tvoje baze
end;
var
sgod,smes,sdan:String;
Godina,mesec,dan,ProtekloDana:Word;
Dt:TDatetime;
begin
sgod := Copy(sString, 1, 2);
smes := Copy(sString, 3, 2);
sdan := Copy(sString, 5, 2);
Godina:=Strtoint(sgod);
mesec:=Strtoint(smes);
dan:=Strtoint(sdan);
if Godina > 50 then Godina := 1900+Godina
else
Godina := 2000+Godina; //ako je posle 2000 te
//EncodeDateTime za prevodenje podatke u Tdatatime
Dt:=EncodeDateTime(Godina,mesec,dan,0,0,0,0);
ProtekloDana:=DaysBetween(now,Dt); // odreduje broj dana izmedu sadacnjeg dana i dana iz stringa sString koji sadrzi datum iz tvoje baze
end;
Ne treba mi time,samo date...i ovo nesto ne ide...Da ponovim jos jednom....evo ovako....
U bazi imam polje staz,koje je string(010101),i imam polje datumunosa,koje je 26.06.2008 godine jer je tada pravljen program,a ovaj staz je staz do tog trenutka...i meni treba da izracunam koliko imam g,d.m od datumaunosa i plus staz znaci ovo 010101....Program sam nasledio,nisam ga ja pisao,to je nekome bilo lakse u access da uradi tako...
U bazi imam polje staz,koje je string(010101),i imam polje datumunosa,koje je 26.06.2008 godine jer je tada pravljen program,a ovaj staz je staz do tog trenutka...i meni treba da izracunam koliko imam g,d.m od datumaunosa i plus staz znaci ovo 010101....Program sam nasledio,nisam ga ja pisao,to je nekome bilo lakse u access da uradi tako...
Ja ne znam kako bolje da objasnim, stringove ne mozes sabirati, string moras pretvoriti u odgovarajuce broje i onda sabirati. Poslao sam ti i funkcije kako da pretvoris string u brojeve a i drugi su to cinili, tvoj zadatak je da sednes i iskombinujes ta dve stvari a to je max dva sata posla, ne razumam sta ti je tu problem.
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.
How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
izmenjeno 1 put, poslednji put Milan Milosevic 08.07.2015. u 20:43
Izmene poruke
- Milan Milosevic08.07.2015. u 20:43zapis iz teksta poruke
Ok jasno mi je gde je tvoj problem.
izmenjeno 1 put, poslednji put Milan Milosevic 09.07.2015. u 06:04
Izmene poruke
- Milan Milosevic09.07.2015. u 06:04zapis iz teksta poruke
Evo jos jedna procedura koja racuna godine, mesece i dane.
Po autoru uzima u obzir i prestupne godine.
POmocu ove funkcije dobices godine, mesece i dane izmedu danasnjeg dana ili nekog drugo koji ti treba i 26.06.2008.
Iz moje procedure izvuci ces godine, mesece i dane radnog staza do 26.06.2008.
i na kraju ces da ih saberes.
Ukoliko broj dana prelazi 30 ili 31? (Moras da pitas nekog pravnika kako se racuna staz)
Po autoru uzima u obzir i prestupne godine.
POmocu ove funkcije dobices godine, mesece i dane izmedu danasnjeg dana ili nekog drugo koji ti treba i 26.06.2008.
Iz moje procedure izvuci ces godine, mesece i dane radnog staza do 26.06.2008.
i na kraju ces da ih saberes.
Ukoliko broj dana prelazi 30 ili 31? (Moras da pitas nekog pravnika kako se racuna staz)
Code:
procedure YearsMonthsWeeksDaysBetween(DateFrom, DateTo : TDate; Var YearsGap, MonthsGap, WeeksGap, DaysGap : Word);
var
DaysNumber,DaysCounter,DaysInAMonthCounter: Word;
YearsCount, MonthsCount, WeeksCount, DaysCount,DaysInCurrentMonth: Word;
TempDate : TDate;
begin
//Init Vars.
// Respresents: YearsGap, MonthsGap, WeeksGap, DaysGap
YearsCount:=0; MonthsCount:=0; WeeksCount:=0; DaysCount:=0;
// Represents: The Days gap by two dates (In Days only) and Days Counter.
DaysCounter:=0; DaysNumber:=DaysBetween(DateFrom, DateTo);
// Represents: The current Month's number of days and Days counter (per a month)
DaysInCurrentMonth:=0; DaysInAMonthCounter:=0;
// Copy the DateFrom parameter for farther calculations
TempDate:=DateFrom;
// Update the number of days in current month
DaysInCurrentMonth:=DaysInMonth(TempDate);
// Actual Job -- Check on each day.
While DaysCounter < DaysNumber do
Begin
Inc(DaysCounter);
Inc(DaysInAMonthCounter);
Inc(DaysCount);
If DaysCount=7 Then
Begin
Inc(WeeksCount);
DaysCount:=0;
End;
// If you reach the end of a month, based on the number
// of days of the current month then
If (DaysInAMonthCounter = DaysInCurrentMonth) Then
Begin
Inc(MonthsCount);
WeeksCount:=0;
DaysCount:=0;
If MonthsCount=12 then
Begin
Inc(YearsCount);
MonthsCount:=0;
End;
// Add a month, based on the month's number of days, to DateFrom
TempDate:=TempDate+DaysInCurrentMonth;
// Calculate the number of days of the next month
DaysInCurrentMonth:=DaysInMonth(TempDate);
// Start coung Month's days all over again.
DaysInAMonthCounter:=0;
End;
End;
End;
procedure YearsMonthsWeeksDaysBetween(DateFrom, DateTo : TDate; Var YearsGap, MonthsGap, WeeksGap, DaysGap : Word);
var
DaysNumber,DaysCounter,DaysInAMonthCounter: Word;
YearsCount, MonthsCount, WeeksCount, DaysCount,DaysInCurrentMonth: Word;
TempDate : TDate;
begin
//Init Vars.
// Respresents: YearsGap, MonthsGap, WeeksGap, DaysGap
YearsCount:=0; MonthsCount:=0; WeeksCount:=0; DaysCount:=0;
// Represents: The Days gap by two dates (In Days only) and Days Counter.
DaysCounter:=0; DaysNumber:=DaysBetween(DateFrom, DateTo);
// Represents: The current Month's number of days and Days counter (per a month)
DaysInCurrentMonth:=0; DaysInAMonthCounter:=0;
// Copy the DateFrom parameter for farther calculations
TempDate:=DateFrom;
// Update the number of days in current month
DaysInCurrentMonth:=DaysInMonth(TempDate);
// Actual Job -- Check on each day.
While DaysCounter < DaysNumber do
Begin
Inc(DaysCounter);
Inc(DaysInAMonthCounter);
Inc(DaysCount);
If DaysCount=7 Then
Begin
Inc(WeeksCount);
DaysCount:=0;
End;
// If you reach the end of a month, based on the number
// of days of the current month then
If (DaysInAMonthCounter = DaysInCurrentMonth) Then
Begin
Inc(MonthsCount);
WeeksCount:=0;
DaysCount:=0;
If MonthsCount=12 then
Begin
Inc(YearsCount);
MonthsCount:=0;
End;
// Add a month, based on the month's number of days, to DateFrom
TempDate:=TempDate+DaysInCurrentMonth;
// Calculate the number of days of the next month
DaysInCurrentMonth:=DaysInMonth(TempDate);
// Start coung Month's days all over again.
DaysInAMonthCounter:=0;
End;
End;
End;