[ popmilan76 @ 22.06.2015. 19:56 ] @
Kako pomocu Delphija i Access baze otvoriti Quuery napravljen u Access,i da se rezultat pokaze u dbgridu na formi u Delphiju... |
[ popmilan76 @ 22.06.2015. 19:56 ] @
[ savkic @ 22.06.2015. 20:18 ] @
Imas u jednoj od top tema ovde kako koristiti ADO u Delphiju, pogledaj i tu ces naci kako se uvezati na Access.
[ komplikator @ 24.06.2015. 06:58 ] @
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
[ popmilan76 @ 04.07.2015. 16:48 ] @
A da li mogu da pokrenem proceduru napravljenu u access iz delphija...
[ Rapaic Rajko @ 05.07.2015. 10:21 ] @
Pogledaj StoredProc, zaboravih kako to ide sa ADO-om.
Pozz [ popmilan76 @ 05.07.2015. 15:38 ] @
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...
[ Rapaic Rajko @ 06.07.2015. 11:10 ] @
Koji deo je zapeo?
Pozz [ popmilan76 @ 06.07.2015. 15:04 ] @
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... [ savkic @ 06.07.2015. 22:27 ] @
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.
[ popmilan76 @ 06.07.2015. 22:43 ] @
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...
[ savkic @ 07.07.2015. 10:32 ] @
Dakle iz stringa "1g,1m,21dan" treba da izvuces pojedinačne podatke?
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; 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; [ captPicard @ 07.07.2015. 13:43 ] @
Njemu je u formatu ggmmdd, znači ovako nekako:
Code: 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... [ popmilan76 @ 07.07.2015. 22:16 ] @
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....
[ savkic @ 07.07.2015. 22:49 ] @
Ne mozes sabirati stringove, staz koji ti je u stringu pretvori u normalan oblik (integer vrednosti) i onda primeni sabiranje.
[ popmilan76 @ 08.07.2015. 14:56 ] @
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.... [ Milan Milosevic @ 08.07.2015. 15:56 ] @
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 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; [Ovu poruku je menjao Milan Milosevic dana 08.07.2015. u 17:55 GMT+1] [ popmilan76 @ 08.07.2015. 17:31 ] @
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... [ savkic @ 08.07.2015. 18:20 ] @
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.
[ Milan Milosevic @ 08.07.2015. 18:39 ] @
Ok jasno mi je gde je tvoj problem.
[Ovu poruku je menjao Milan Milosevic dana 08.07.2015. u 20:43 GMT+1] [ Milan Milosevic @ 08.07.2015. 19:41 ] @
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) 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; [Ovu poruku je menjao Milan Milosevic dana 09.07.2015. u 06:04 GMT+1] [ Milan Milosevic @ 08.07.2015. 20:20 ] @
Ovo bi trebalo da radi valjano
Code: procedure TForm1.Button1Click(Sender: TObject); var sgod,smes,sdan,sString:String; Godina,mesec,nedelja,dan,ProtekloDana:Word; iGod,imes,idan:Integer; Dt,PocDate:TDate; begin sString:=Edit1.Text; // string iz baze sgod := Copy(sString, 1, 2); smes := Copy(sString, 3, 2); sdan := Copy(sString, 5, 2); Godina:=Strtoint(sgod); mesec:=Strtoint(smes); dan:=Strtoint(sdan); PocDate:=EncodeDate(2008,06,6); // datum kada je uneta zadnja izmena {Odredujemo datum od kada je poceo da se racuna radni staz} PocDate:=IncDay(PocDate,-dan); PocDate:=IncMonth(PocDate,-mesec); PocDate:=IncYear(PocDate,-Godina); Dt:= Today; // datum do koda prracunavamo novi radni staz Uzimamo danas DateDiff(PocDate,Dt,iGod,imes,idan); // trazimo razliku izmedu dva datuma OVA FUNKCIJA NE VRACA PRAVILNO BROJ MESECI ShowMessage('Radni staz iznosi '+Inttostr(idan)+' dana, '+Inttostr(imes-1)+'meseci , '+Inttostr(iGod)+' godina'); end; [ popmilan76 @ 08.07.2015. 22:27 ] @
Evo ovako,jasno mi je da ne mogu sabirati stringove,nije tu problem....Ja cak napravim i razliku izmedju dva datuma u formatima,g,m,d....ali kada iz onog stringa izdvojim ,recimo mesece.....dobijam,recimo 19 meseci,sto je 1 godina i 7 meseci,isto tako i za dane....
[ savkic @ 09.07.2015. 00:18 ] @
> ali kada iz onog stringa izdvojim ,recimo mesece.....dobijam,recimo 19 meseci,sto je 1 godina i 7 meseci,isto tako i za dane....
Tu je samo problem sa danima, moraš videti koji je zvaničan algoritam (PIO fond je tu merodavan) za sabiranje dana i da li je npr. 35 dana, 1m i 4d ili 1m i 5d. [ popmilan76 @ 09.07.2015. 08:39 ] @
Mesec mi racuna kao 30 dana...
[ popmilan76 @ 09.07.2015. 09:18 ] @
Uspeo sam,hvala svima...
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|