* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

Trascinare un file nel programma
DB concetti fondamentali e ZeosLib
Recuperare codice HTML da pagina web
Mandare mail con Lazarus
Stabilire il sistema operativo
Esempio lista in pascal
File INI
Codice di attivazione
Realizzare programmi multilingua
Lavorare con le directory
Utilizzare Unità esterne
TTreeView
TTreeview e Menu
Generare controlli RUN-TIME
LazReport, PDF ed immagini
Intercettare tasti premuti
Ampliare Lazarus
Lazarus e la crittografia
System Tray con Lazarus
UIB: Unified Interbase
Il file: questo sconosciuto
Conferma di chiusura di un applicazione
Liste e puntatori
Overload di funzioni
Funzioni a parametri variabili
Proprietà
Conversione numerica
TImage su Form e Panel
Indy gestiore server FTP lato Client
PopUpMenu sotto Pulsante (TSpeedButton)
Direttiva $macro
Toolbar
Evidenziare voci TreeView
Visualizzare un file Html esterno
StatusBar - aggirare l'errore variabile duplicata
Da DataSource a Excel
Le permutazioni
Brute force
Indy 10 - Invio email con allegati
La gestione degli errori in Lazarus
Pascal Script
Linux + Zeos + Firebird
Dataset virtuale
Overload di operatori
Lavorare con file in formato JSON con Lazarus
Zeos ... dietro le quinte (prima parte)
Disporre le finestre in un blocco unico (come Delphi)
Aspetto retrò (Cmd Line)
Lazarus 1.0
Come interfacciare periferica twain
Ubuntu - aggiornare free pascal e lazarus
fpcup: installazioni parallele di lazarus e fpc
Free Pascal e Lazarus sul Raspberry Pi
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Creare un server multithread
guida all'installazione di fpc trunk da subversion in linux gentoo
Indice
DB concetti fondamentali e connessioni standard
Advanced Record Syntax
DB concetti fondamentali e DBGrid
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
Advanced Record Syntax: un esempio pratico
Superclasse form base per programmi gestionali (e non)
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Installare lazarus su mac osx sierra
immagine docker per lavorare con lazarus e free pascal
TDD o Test-Driven Development
Benvenuto! Effettua l'accesso oppure registrati.
Maggio 06, 2024, 12:31:44 pm

Inserisci il nome utente, la password e la durata della sessione.

478 Visitatori, 1 Utente
 

Autore Topic: compare date.... non funziona bene  (Letto 13170 volte)

Narciso

  • Scrittore
  • Full Member
  • *****
  • Post: 116
  • Karma: +0/-0
compare date.... non funziona bene
« il: Dicembre 31, 2012, 12:54:32 pm »
SAlve,
non so perche' ma non risco ad ordinare le date in una stringgrid....

in OnComparecells metto il seguente codice.....

ShortDateFormat:='dd/mm/yyyy';
case acol of
0,1:result :=trunc(strtointdef(stringgrid1.cells[acol,arow],0)-strtointdef(stringgrid1.cells[bcol,brow],0));
5..12:result:=trunc(strtofloatdef(stringgrid1.cells[acol,arow],0)-strtofloatdef(stringgrid1.cells[bcol,brow],0));
3: result :=comparedate(StrToDate(stringgrid1.Cells[ACol,ARow]),StrToDate(stringgrid1.Cells[BCol,BRow]));
else result:=comparetext(stringgrid1.cells[acol,arow],stringgrid1.cells[bcol,brow]);
end;
if stringgrid1.SortOrder = soDescending then
    result := -result;


il risultato che dà è questo...

31/12/2012
31/12/2012
07/01/2013
06/01/2013
06/01/2013
06/01/2013
06/01/2013
06/01/2013

come vedete non considera l'anno..... come mai?

Gia' che ci sono :BUON ANNOOOOOOOOOOOOOOOOOOO



Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:compare date.... non funziona bene
« Risposta #1 il: Dicembre 31, 2012, 02:58:11 pm »
Scusa Narciso, ma compareDate ... da che unit è esportata?
L'ho trovata solo in amigados.pp ... ma nemmeno con un prototipo di chiamata corretto ...
Codice: [Seleziona]
FUNCTION CompareDates(const date1 : pDateStamp;const date2 : pDateStamp) : LONGINT;
BEGIN
  ASM
    MOVE.L  A6,-(A7)
    MOVE.L  date1,D1
    MOVE.L  date2,D2
    MOVEA.L _DOSBase,A6
    JSR -738(A6)
    MOVEA.L (A7)+,A6
    MOVE.L  D0,@RESULT
  END;
END;
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

Legolas

  • Global Moderator
  • Sr. Member
  • *****
  • Post: 366
  • Karma: +3/-0
Re:compare date.... non funziona bene
« Risposta #2 il: Dicembre 31, 2012, 03:56:39 pm »
E' in dateutils  ;)

bonmario

  • Hero Member
  • *****
  • Post: 1303
  • Karma: +10/-1
Re:compare date.... non funziona bene
« Risposta #3 il: Dicembre 31, 2012, 04:00:22 pm »

il risultato che dà è questo...

31/12/2012
31/12/2012
07/01/2013
06/01/2013
06/01/2013
06/01/2013
06/01/2013
06/01/2013


Sembra quasi che ti sta facendo un ordinamento considerandole delle stringhe.

Ciao, Mario

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:compare date.... non funziona bene
« Risposta #4 il: Dicembre 31, 2012, 04:09:27 pm »
Narciso, le date in delphi e freepascal sono una specie di numero a virgola mobile.
I numeri decimali sono il tempo e gli interi sono la data effettiva.
Questa è una premessa da fare per capire il codice delle funzioni che ti allego.
Codice: [Seleziona]
Function CompareDate(const A, B: TDateTime): TValueRelationship;
begin
  If SameDate(A,B) then
    Result:=EQualsValue
  else if A<B then
    Result:=LessThanValue
  else
    Result:=GreaterThanValue;
end;

Function SameDate(const A, B: TDateTime): Boolean; inline;
begin
  Result:=Trunc(A)=Trunc(B);
end; 
Come suggerisce bonmario, sembra che la compare avvenga tra stringhe e non numeri.
Nelle funzioni non viene messa nessuna logica o algoritmi classici per la gestione delle date. Fanno un banale "compare" numerico
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2874
  • Karma: +20/-4
Re:compare date.... non funziona bene
« Risposta #5 il: Dicembre 31, 2012, 04:11:31 pm »
scusate ma ordinare come stringa con il formato "YYYYMMDD" vi fa schifo? ;)
Imagination is more important than knowledge (A.Einstein)

Narciso

  • Scrittore
  • Full Member
  • *****
  • Post: 116
  • Karma: +0/-0
Re:compare date.... non funziona bene
« Risposta #6 il: Gennaio 01, 2013, 05:26:27 pm »
in effetti il comparedate l'ho preso dal dateutils.....
ma come potete notare funziona male....

Mi faro' le funzioni adatte da solo..... prendendo spunto da quelle di Stilgar


Legolas

  • Global Moderator
  • Sr. Member
  • *****
  • Post: 366
  • Karma: +3/-0
Re:compare date.... non funziona bene
« Risposta #7 il: Gennaio 01, 2013, 07:36:07 pm »
Uhm... Ho provato a mettere tre tedit e un  tbutton su un form per vedere se in effetti comparedate non funziona:


Codice: delphi [Seleziona]

procedure TForm1.Button1Click(Sender: TObject);
begin
  // shortdateformat è deprecato
  DefaultFormatSettings.ShortDateFormat:='dd/mm/yyyy';
  case CompareDate(strtodate(edit1.Text), strtodate(Edit2.Text)) of
   -1: edit3.Text:='data1 < data2';
    0: edit3.Text:='data1 = data2';
    1: edit3.Text:='data1 > data2';
  end;
end;   


Mi pare che funziona come dovrebbe  ???
L'errore a questo punto potrebbe essere da qualche altra parte.

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:compare date.... non funziona bene
« Risposta #8 il: Gennaio 01, 2013, 10:13:20 pm »
Narciso, riesci a pubblicare il progettino che ti sta facendo rognare?
Legolas ha trovato che le funzioni funzionano (battutona d'inizio anno).
PS:
Il codice che ho messo sono di DateUtils ... non le ho mica inventate io ;)
Io farei tutto un altro giro.
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

Narciso

  • Scrittore
  • Full Member
  • *****
  • Post: 116
  • Karma: +0/-0
Re:compare date.... non funziona bene
« Risposta #9 il: Gennaio 02, 2013, 07:05:26 pm »
A quale progetto ti riferisci? Ne ho due o tre per i polpastrelli! :)


Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:compare date.... non funziona bene
« Risposta #10 il: Gennaio 02, 2013, 08:27:28 pm »
Emmm, quello legato a questo post?
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

Narciso

  • Scrittore
  • Full Member
  • *****
  • Post: 116
  • Karma: +0/-0
Re:compare date.... non funziona bene
« Risposta #11 il: Gennaio 03, 2013, 07:56:25 am »
MICA HO CAPITO.....
vuoi che ti pubblichi il codice della ruotine di ordinamento....( ma quella gia' l'ho messa).. oppure vuoi l'exe..... cosa intendi per pubblicare il progetto?
L'intero lpj? Bho?

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:compare date.... non funziona bene
« Risposta #12 il: Gennaio 03, 2013, 10:17:17 am »
Per riuscire a capire bene il problema, e quale sia il problema dell'ordinamento, avendo tutti i sorgenti è più facile aiutarti.
Sempre che non ci siano problemi di "copyright" o clausole di riservatezza che verrebbero infrante. ;)
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

Legolas

  • Global Moderator
  • Sr. Member
  • *****
  • Post: 366
  • Karma: +3/-0
Re:compare date.... non funziona bene
« Risposta #13 il: Gennaio 03, 2013, 10:35:08 am »
Basta un esempio minimo che mostri il problema: una stringgrid con delle date e la procedura per ordinarli in un onClick di un button

Narciso

  • Scrittore
  • Full Member
  • *****
  • Post: 116
  • Karma: +0/-0
Re:compare date.... non funziona bene
« Risposta #14 il: Gennaio 03, 2013, 12:44:21 pm »
Ok.. ecco l'esempio... come vedrete, cliccando la fixed cell di una colonna... i dati vengono ordinati... bene.. tranne che per le date.....


 

Recenti

How To

Utenti
Stats
  • Post in totale: 18801
  • Topic in totale: 2239
  • Online Today: 513
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 1
Guests: 478
Total: 479

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.