Gå til innhold

lese datoverdi tilbake fra *.ini fil


Anbefalte innlegg

jeg bruker DateTimePicker for å plukke ut bestemte datoer i programmet.

denne datoen blir lagre i en inin fil med metoden

 

myinifile.WriteDate('dato',inttostr(knr),DateTimePicker1.Date);

 

det finnes ingen metode for å lese tilbake datoen direkte til DateTimePicker

 

jeg har foresøkt med

st: string;
knr:integer; / variabelen er  definert utenfor  prosedyren 
.
.
.
.

st:=myinifile.ReadString('dato',inttostr(knr),'-');

 

men jeg finner ingen metode som konverterer en stringvariabel til en timedate type variabel

 

 

er det noen som har en ide hvordan jeg kan få lest denne verdien tilbake til DateTimePicker1.date ?

Lenke til kommentar
Videoannonse
Annonse

Dette burde gjøre jobben direkte, hvis dagens dato (Date) kan være default dato:

 

DateTimePicker1.Date:= MyInifile.ReadDate ('Dato', IntToStr (KNr), Date);

 

 

Ellers ser jeg at du skriver datoen til Ini-fila som en dato, men leser den som en string. Hvorfor det?

Lenke til kommentar
  • 2 uker senere...

Husk at en TDateTime kun er en double hvor heltall-biten er datoen, og kommabiten er tidspunktet. Letteste måten å lagre en dato på blir da å lagre og lese den som ett heltall ( trunc(mindato) ).

 

Bakdelen er at det ikke blir så enkelt å se hvilken dato det er i fila...

 

Dersom du lagrer datoen som streng vil du fort slite med forskjellige datoformater når du skal lese det inn igjen.

 

-Vegar

Lenke til kommentar

Hvis du skriver datoen som en streng vha. DateToStr (EnDato), så vil du kunne sjekke med

Dato:= myinifile.Readstr ('dato',inttostr(knr),'');

om Dato er en tom streng eller en streng forskjellig fra tom (Dato <> '').

 

Du slipper forskjellige datoformater såfremt du deklarerer datoformatet i programmet ditt (ShortDate osv), da vil alle datoer som du ikke formaterer selv følge samme standard gjennom hele programmet.

Lenke til kommentar

jeg har gjort det slik :

for å lagre dato:

 

myinifile.WriteDate('dato',inttostr(knr),datetimepicker1.Date);

for å lese datoen :

st:=myinifile.ReadString('dato',inttostr(knr),'-');
if st <> '-' then datetimepicker1.Date:=strtodate(st);

jeg kunne jo også lese fra inn filen direkte til datetimepicker1.Date i stedet.

 

å gjøre det slik jeg gjør det forsinker det progrmmet på noen måte ?

 

knr er en integer variabel som bruker for å skille ut de forskjelige dataen

Endret av elg-elg123
Lenke til kommentar
Du slipper forskjellige datoformater såfremt du deklarerer datoformatet i programmet ditt (ShortDate osv), da vil alle datoer som du ikke formaterer selv følge samme standard gjennom hele programmet.

 

Noe som slett ikke er noen god ide... Som utvikler bør du forholde deg til de valg brukeren har i stede for å tvinge på dine egne preferanser. Derfor bør alle datoer som vises formateres med det datoformatet brukeren har spesifisert. Alle steder brukeren har anledning til å skrive inn datoer, må man først og fremst takle de formatene som er spesifisert i regionale innstillinger. Dernest kan man forsøke å være kreativ og også forstå seg på input som ikke samsvarer med disse formatene.

 

Dersom det er ønskelig å lagre dato som tekst, så kan du gi inn en TFormatSettings til konverteringsfunksjone (f.eks. strToDate( ) og dateToStr( ) ) slik at du har full kontroll over hvilke format og skilletegn som blir brukt ved konvertering.

 

-Vegar

Lenke til kommentar

Format71:

 

Her lager elg-elg123 et program til eget bruk, og holder seg sikkert (inntil videre) til sine egne standarder. Så vidt jeg husker, så er datoformatet per se en ShortDate, men det kan man selvfølgelig endre fra dd.mm.åå til dd-mm-åå eller til langt format.

 

Så vidt jeg forstår, så vil elg-elg123 lage et program til eget bruk - kanskje ad hoc, og med egne fasiliteter, og da vil jeg hjelpe han ,istedenfor å lage et internasjonalt anvendbart program. Det får han komme tilbake til siden.

 

 

 

elg-elg123:

 

Jeg vil anbefale deg i dette tilfellet å lagre datoen som en string, det får ikke særlig konsekvenser vhp hurtighet, siden du først har valgt å teste på den bindestreken eller andre tegn i datoen. Det blir kun snakk om et mikrosekund i "merarbeid" med å konvertere til en TDateTime. Lykke til! :thumbup:

Lenke til kommentar

Ja, for all del. Driver man og lærer seg å programmere så er det jo bare tull og tøys å gjøre ting 'skikkelig'... Min erfaring er at alle de vanene man legger seg til når man 'bare' lager et lite program til seg selv, de tar man med seg når man en dag skal lage noe andre også har interesse av.

 

For meg er det ikke viktig om elgen lagrer dato som streng eller som heltall, men jeg tror ikke han tar skade av å høre fordeler og ulemper ved valget han tar. Dersom han velger å lagre som strenger er det ikke store jobben å spesifisere formatet vha TFormatSettings og dermed være på den trygge siden. Lagring av datoer (og flyttall) er et reelt problem i mye software, men er lett å ungå dersom en er bevist på hva man driver med.

 

-Vegar

Lenke til kommentar

hva er det som er "problemet" ?

 

som der ser lengre opp så lagrer jeg ikke datoen som en streng.

jeg leser den kun inn som en streng fordi jeg bruker en defautl verdi som blir lagt i returstrengen hvis det ikke er noen dato der .

denne verdien (tegnet ) blir kun brukt for å kontrollere om det er dato der eller ikke.

hvis det er noen dato der så blir det plassert i et felt ( datetimepicker1)

 

hvis datetimepicker1 får en "tom dato" i stedet for en reel dato så tror jeg at programmet krasjer.

 

programmering på hobby basis her jeg nok hold på med i nærmer 25 år.

og pascal ( delphi o.l) har jeg hold på med i mere en 10 år nå

Lenke til kommentar
Ja, for all del. Driver man og lærer seg å programmere så er det jo bare tull og tøys å gjøre ting 'skikkelig'... Min erfaring er at alle de vanene man legger seg til når man 'bare' lager et lite program til seg selv, de tar man med seg når man en dag skal lage noe andre også har interesse av.

 

For meg er det ikke viktig om elgen lagrer dato som streng eller som heltall, men jeg tror ikke han tar skade av å høre fordeler og ulemper ved valget han tar. Dersom han velger å lagre som strenger er det ikke store jobben å spesifisere formatet vha TFormatSettings og dermed være på den trygge siden. Lagring av datoer (og flyttall) er et reelt problem i mye software, men er lett å ungå dersom en er bevist på hva man driver med.

 

-Vegar

 

Ja, da er vi jo enige: "Man må klare å starte motoren før man lærer seg finessene med kjøring og trafikkregler", for å si det sånn. :D

Lenke til kommentar
hva er det som er "problemet" ?

 

som der ser lengre opp så lagrer jeg ikke datoen som en streng.

jeg leser den kun inn som en streng fordi jeg bruker en defautl verdi som blir lagt i returstrengen hvis det ikke er noen dato der .

denne verdien (tegnet ) blir kun brukt for å kontrollere om det er dato der eller ikke.

hvis det er noen dato der så blir det plassert i et felt ( datetimepicker1)

 

hvis datetimepicker1 får en "tom dato" i stedet for en reel dato så tror jeg at programmet krasjer.

 

programmering på hobby basis her jeg nok hold på med i nærmer 25 år.

og pascal ( delphi o.l) har jeg hold på med i mere en 10 år nå

 

Har du prøvd å lagre datoen som en tekst? Da kan du teste på en tom streng hvis det ikke er lagret en datostreng der. Når du lagrer som en datotype, så lagres datoen som et flytttall (double) som Vegar allerede har nevnt. 0 ("ingen dato" i ditt tilfelle) er også en dato (12/30/1899 12:00). Da er det lettere å lagre som en string, og lese datoen tilbake som en string.

 

En 0 er jo i og for seg en ukurant dato, for jeg regner med at du stort sett bruker datoer i vår epoke, og ikke fra 1899.

 

Forøvrig kunne det jo vært interessant å se et lite utsnitt av den INI-fila du bruker. Bare for å få litt kjennskap til hva som er der... Gjerne som en PM om du vil.

Lenke til kommentar
hvis datetimepicker1 får en "tom dato" i stedet for en reel dato så tror jeg at programmet krasjer.

 

 

Glemte å si at at jeg er enig i akkurat dette at det oppstå et problem med en "tom dato",

TDateTimePicker vil alltid returnere en gyldig dato om du klikker på en gitt dato. Det kan du jo for kontrollen sin del også legge inn en liten foreløpig test på, om du vil være helt sikker (IsValidDateTime(...) )

Lenke til kommentar

programmet er et som tar vare på noen fotball resultater fra eliteserien .

 

foruten å legge inn,endre eller fjerne lag før behandling

så oppretter programmet kampene ( alle lag settes opp mot hverandre i en "liste" , hver kamp får sitt eget nr.

 

dette numeret brukes som referanse

 

det er noen felter som jeg bruker for å skrive inn opplysningene.

data fra hvert felt får hver sin liste , og så bruker jeg referanse nummeret for å samenføre det med kampene.

 

f.eks så har kampen mellom bodø glimt og aalesund et eget referanse nummer.

samme numeret bruker jeg for hente fra eller skrive til listen for

- runde

- dato

- målene til hjemmelaget

- målene til borte laget

- pause resultatene for hjemme og borte laget

 

så skal jeg bruke det for å lage miene egen statistikker

Lenke til kommentar
som der ser lengre opp så lagrer jeg ikke datoen som en streng.

jeg leser den kun inn som en streng fordi jeg bruker en defautl verdi som blir lagt i returstrengen hvis det ikke er noen dato der .

denne verdien (tegnet ) blir kun brukt for å kontrollere om det er dato der eller ikke.

hvis det er noen dato der så blir det plassert i et felt ( datetimepicker1)

 

programmering på hobby basis her jeg nok hold på med i nærmer 25 år.

og pascal ( delphi o.l) har jeg hold på med i mere en 10 år nå

 

Beklager, men dette viser jo bare at du ikke helt vet hva du driver med...

 

WriteDate( ) er kun en wrapper rundt WriteString( ) og DateToString( ), så hvis du bruker WriteDate( ), så lagrer du datoen som en streng, og datoen blir konvertert til streng med gjeldende datoformat slik det er satt opp i regionale innstillinger.

 

Tilsvarende vil ReadDate( ) lese inn verdien fra fila som en streng, og så forsøke å konvertere den til en dato. Igjen vil den ta utgangspunkt i regionale innstillinger, så hvis du har vært og endret datoformat i mellomtiden, eller du har kopiert fila/programmet over til en annen maskin som har annet datoformat, vil du få en kræsj.

 

Hvis du velger å ikke bry deg om muligheten for endring i datoformatet, og fortsetter å lagre det som streng, er det unødvendig å bruke '-' som default og så sjekke på denne. Du kan like godt bruke ReadDate( ), og putte inn verdien som allerede står i datetime-pickeren som default verdi. På den måten vil ny dato bli lest fra fila hvis den finnes i fila, eller du vil beholde datoen du allerede har som default. I koden din så mangler du jo en 'else' som sier hva som skal skje dersom strengen du leser inn er lik '-', så da går jeg ut i fra at du har satt en default verdi på datetimepickeren ett annet sted....

 

Er det ikke godt å vite at man har mer å lære selv etter 25 år? :cool:

 

-Vegar

Lenke til kommentar
f.eks så har kampen mellom bodø glimt og aalesund et eget referanse nummer.

samme numeret bruker jeg for hente fra eller skrive til listen for

- runde

- dato

- målene til hjemmelaget

- målene til borte laget

- pause resultatene for hjemme og borte laget

 

så skal jeg bruke det for å lage miene egen statistikker

 

Hva med å bruke en database, da? INI-filer er ikke så godt egna til akkurat dette. Jeg regner med at du får minst én en-til-mange forhold som ikke er egnet for en ini-fil. (Ett lag har mange kamper, osv.)

Lenke til kommentar

nå brukes denne testen også for å sjekke om det er registrert data for de andre felten også.

 

det med å bruke default dato i datapikker kan ikke jeg se løser problemet som kan forekomme.

 

default vedien blir sansunliv den som er dagens dato ( den dagen pcen er på). også denne datoen kan de hande at det går en fotbalkamp.

derfor må jeg bruke noe annet en dato her ( alle datoer kan brukes )

 

alternativet er å bruke en egen verdi som skrives til registret mit .

 

at jeg ikke bruker data base til dette er:

etter at noe av database muligheten ble fjerne fra delphi er det blit 10 ganger værre å lage database .

 

dessuten så virker det som om jeg måtte skrevet en del mere kode for å får få det til å virke på "samme måten"

 

 

jeg har planer å lage meg en database over diverse tegneserier jeg har , men har en del database muligheter i Delphi jeg må finne ut av først.

 

kanskje prøver jeg ut free pascal i stedet

Lenke til kommentar

Jeg ser i grunnen problemstillingen din. Hvis du mener at ini-fil er greiest (i startfasen), så for all del. Jeg har fullversjonen av Delphi 2007, så dette med databaser der går veldig greit. Eksempelvis å bruke filter eller spørringer for å liste / kjøre statistikk for et gitt lag eller dato.

 

"Man skal aldri være kategorisk", som man sier... :D

Lenke til kommentar
det med å bruke default dato i datapikker kan ikke jeg se løser problemet som kan forekomme.

Tror ikke helt jeg forstår hvilket problem skal løses lenger, jeg.

 

Trodde det opprinnelige problemet var å lagre/lese dato til/fra inifil. I såfall har du to alternativer: Tekst, og tall.

 

Velger du tekst må du være obs på at du kan få problemer med konverteringen dersom det har skjedd endringer i datoformat-innstillingene mellom lagring og innlesing, med mindre du spesifiserer hvilket datoformat som skal benyttes når du konverterer (TFormatSettings).

 

Velger du tall så slipper du denne problemstillingen, men får da en verdi i inifilen som ikke er så lett leselig, noe som kan være en bakdel hvis du har behov for å kontrollere verdiene i fila vha notepad eller lignende.

 

Jeg forstår det slik at du har bestemt deg for å gå for tekst, så da er det problemet løst.

 

Neste problem blir da håndtering av at dato mangler ved innlesing. I koden du har vist frem så benytter du strengverdien '-' for å angi at dato ikke finnes i fila, og i såfall setter du ingen verdi i datetime-pickeren. Datetime-pickeren kan imidlertid ikke vise blank verdi, så en eller annen dato må den vise. Mitt forslag er at du da gir inn denne verdien som default i stede for '-', så slipper du å teste innlest verdi mot '-' i etterkant fordi du alltid vil få innlest verdi eller defaultverdien returnert.

 

Hva er så 'problemene som kan forekomme' ? Det eneste problemet jeg klarer å se kan forekomme har med konvertering av dato->streng->dato å gjøre, og det problemet ønsker du jo ikke å ta høyde for?

 

-Vegar

Lenke til kommentar

jeg klarte å lage database før . tror det var med versjon 3 eller 4.

den måten ( muligheten) jeg brukte da er fjernet fra senere versjoner .

 

å begynne å sette meg inn i SQL er lit for omfattende for tiden

 

det har vær vanskelig å finne noen eksempler på hvordan man kan bruke

forskjelige komandoer i SQL .

 

jeg ønsker å finne ut :

- hvordan oppretter man en database med et navn som jeg bestemmer ( gjerne fra en edit boks )

- oprette en eller flere tabeller ( ellet tilsvarende)

- oprette felter

- endre navn på tabell eller felt.

- slette tabell eller felter .

 

- tilknytning mellom de forskjelige tabellen med refranse i et av feltene

 

poenget med dette er at jeg kan klikke på en knapp og så utføre de forskjelige kommandoene

 

 

hvordan skulle jeg få til programmet jeg jobber med som å fungere med et database program ?

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...