You can subscribe to this list here.
2003 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2004 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
(2) |
Aug
|
Sep
(1) |
Oct
(8) |
Nov
|
Dec
(1) |
2005 |
Jan
(7) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(7) |
Dec
|
2009 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
2015 |
Jan
|
Feb
|
Mar
(3) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Arioch <the...@nm...> - 2005-11-03 23:42:59
|
overriding virtual finction: function TDbf.GetIsIndexField(Field: TField): Boolean; var s: string; lIndexDef: TDbfIndexDef; begin //This should enable TField.IsIndexField and perhaps some kind of TTableSetKey and TTableSetRange Result := false; if FDbfFile = nil then exit; with Field do if (FieldKind = fkCalculated) or (FieldKind = fkLookup) then exit; if FIndexFile = nil then exit; // no index selected // copying code from GetIndexFieldNames. that is slow, i bet. But we do not cache current index, do we ? lIndexDef := FIndexDefs.GetIndexByName(IndexName); //Guess searching by string when we only want current index is too high if lIndexDef = nil then exit; if lIndexDef.Options * [ixExpression, ixNonMaintained] <> [] then exit; s:=';'+lIndexDef.SortField+';'; //sane here. I guess within Parser or somewhere else there is list of fields (objects) Result := Pos(';'+Field.FullName+';',s) <> 0; end; 2 times we have to search by string :( Some direct link is to be found :) About long field names... I was too optimistic. In Delphi 5 and Delphi 2005: function TField.GetFullName: string; begin if (FParentField = nil) or (DataSet = nil) then Result := FieldName else Result := DataSet.GetFieldFullName(Self); end; This function is private and is not overrideable :( So, until some dumb ParentField is set (which is quite ugly) TDbf cannot fix FullName for BindFields. As a matter of interest - how this function implemented in Lazarus ? So, guess, before calling BindFields TDbf has to modify its Fields and perhaps restore fieldnames after binding ? I'll have to look TBDEDataSet - maybe there are clues ? -- Написано в почтовом клиенте браузера Opera: http://www.opera.com/mail/ |
From: Arioch <the...@nm...> - 2005-11-03 23:40:46
|
Guess, this is to be specified, so that different part of code could be considered as bugs, to-do's and so forth. For example: function TDbfIndexDefs.GetIndexByField uses AnsiUpperCase. That is wrong if field names are locale-independent and is bad if they depends on Dbf locale which may be other than current OS locale. -- Написано в почтовом клиенте браузера Opera: http://www.opera.com/mail/ |
From: Arioch <the...@nm...> - 2005-11-03 13:37:25
|
03.11.05 в 16:10 Micha Nelissen в своём письме писал(а): >>> DeleteFile( TrimLineEnding( Dbf1.GetFileNames ) ); >> I don't like it since .GetFileNames pretends to be normal way to get >> fully quilified dbf file name. > > All related Filenames to dbf "database", not only .dbf. > In potentia. But default value of Files is [dbfFile]. And string as result type. If i remember, i started this to get DBF name and later it was extended to provide other names too. > I think you're the only one using it :-) > After i invented it no one used still? Arrgh! Then i feel angry and enabled to change it in the most cruel miscompatible manner i'd be able to imagine :-) Ok, perhaps i'd re-think it later. -- Написано в почтовом клиенте браузера Opera: http://www.opera.com/mail/ |
From: Micha N. <mi...@ne...> - 2005-11-03 13:10:52
|
Arioch wrote: > 03.11.05 =D0=B2 15:25 Micha Nelissen =D0=B2 =D1=81=D0=B2=D0=BE=D1=91=D0= =BC =D0=BF=D0=B8=D1=81=D1=8C=D0=BC=D0=B5 =D0=BF=D0=B8=D1=81=D0=B0=D0=BB(=D0= =B0): >=20 >> Add your own function TrimLineEnding, then do: >> >> DeleteFile( TrimLineEnding( Dbf1.GetFileNames ) ); >=20 > I don't like it since .GetFileNames pretends to be normal way to get=20 > fully quilified dbf file name. All related Filenames to dbf "database", not only .dbf. > Because of default value of set and because no special function for it = =20 > like GetIndexFilenames exists. >=20 >=20 > And one more question: Why do we want to return multiple filenames in=20 > one string ? > Is FreePAscal capable of making function, returning array-of-AnsiString= ? Yes. > Is D3/D4 capable of it ? No, no dynamic arrays there (at least not in D3). > One ore concern is about >=20 > procedure TDbf.GetFileNames(Strings: TStrings; Files: TDbfFileNames); >=20 > if FDbfFile <> nil then > begin > --------skip----------- > end else > Strings.Add(IncludeTrailingPathDelimiter(FilePathFull) + TableName)= ; >=20 > So if table is closed, Files parameter is just ignored. > IMHO it is to be checked, and exception is to be thrown if requested =20 > filename that cannot be known on closed dataset I think you're the only one using it :-) Micha |
From: Arioch <the...@nm...> - 2005-11-03 12:57:20
|
03.11.05 в 15:25 Micha Nelissen в своём письме писал(а): > Add your own function TrimLineEnding, then do: > > DeleteFile( TrimLineEnding( Dbf1.GetFileNames ) ); I don't like it since .GetFileNames pretends to be normal way to get fully quilified dbf file name. Because of default value of set and because no special function for it like GetIndexFilenames exists. And one more question: Why do we want to return multiple filenames in one string ? Is FreePAscal capable of making function, returning array-of-AnsiString ? Is D3/D4 capable of it ? One ore concern is about procedure TDbf.GetFileNames(Strings: TStrings; Files: TDbfFileNames); if FDbfFile <> nil then begin --------skip----------- end else Strings.Add(IncludeTrailingPathDelimiter(FilePathFull) + TableName); So if table is closed, Files parameter is just ignored. IMHO it is to be checked, and exception is to be thrown if requested filename that cannot be known on closed dataset -- Написано в почтовом клиенте браузера Opera: http://www.opera.com/mail/ |
From: Micha N. <mi...@ne...> - 2005-11-03 12:26:07
|
Arioch wrote: > At least on closed table: > > DeleteFile( DBf1.GetFileNames ) fails. > > Reason: in TDbf.GetFileNames, statement "Result := sl.Text;" returns > filename with concatenated #13#10 at the end. > > I am not sure if this is to be considered as fault though. > But when i want to get single name - i usually do not expect to find > some delimiters there. Add your own function TrimLineEnding, then do: DeleteFile( TrimLineEnding( Dbf1.GetFileNames ) ); ? Micha |
From: Arioch <the...@nm...> - 2005-11-03 12:04:41
|
At least on closed table: DeleteFile( DBf1.GetFileNames ) fails. Reason: in TDbf.GetFileNames, statement "Result := sl.Text;" returns filename with concatenated #13#10 at the end. I am not sure if this is to be considered as fault though. But when i want to get single name - i usually do not expect to find some delimiters there. -- Написано в почтовом клиенте браузера Opera: http://www.opera.com/mail/ |
From: Phillip H. <ski...@fu...> - 2005-01-15 09:49:36
|
> From: "Arioch /BDV/" <the...@nm...> > Date: Fri, 14 Jan 2005 14:36:50 +0300 > Subject: [Tdbf-user] Re: Tdbf-user digest, Vol 1 #14 - 2 msgs Read again. Never asked for Micha to implement a substitute for the BDE alias. Made a comment about how it had been done in the past. That's all ------- Your Government is working hard to entertain you ------- Phillip Hansen Skil-Phil Solutions 033 2677266 082 4541247 -- No virus found in this outgoing message. Checked by AVG Anti-Virus. Version: 7.0.289 / Virus Database: 265.6.10 - Release Date: 10/01/2005 |
From: Phillip H. <ski...@fu...> - 2005-01-11 17:17:34
|
> Setting up an alias for the BDE is a kludge. It's much easier to > store the path yourself in some config file or so. Was thinking today about Clipper days when paths etc were stored in a dbf. Now to remember how it was done and put into use. Been away for so long, any= hints? Thanks ------- No matter how hard you try, you cannot baptize a cat Phillip Hansen Skil-Phil Solutions 033 2677266 082 4541247 -- No virus found in this outgoing message. Checked by AVG Anti-Virus. Version: 7.0.289 / Virus Database: 265.6.10 - Release Date: 10/01/2005 |
From: Micha N. <mi...@ne...> - 2005-01-10 18:00:32
|
Phillip Hansen wrote: >>Nope it is not supported. Most users think that is a good thing ;-) >> >>Use TableName, FilePath to specify path and file to open/create. >> > Thanks for the reply. Why would it not be a good thing? If you do not know the > ultimate path of the data directory it would make hard coding a bit difficult. > Am I missing something? Setting up an alias for the BDE is a kludge. It's much easier to store the path yourself in some config file or so. Micha |
From: Phillip H. <ski...@fu...> - 2005-01-10 17:16:16
|
> Nope it is not supported. Most users think that is a good thing ;-) > > Use TableName, FilePath to specify path and file to open/create. > > HTH, > > Micha Thanks for the reply. Why would it not be a good thing? If you do not know= the ultimate path of the data directory it would make hard coding a bit= difficult. Am I missing something? Thanks -- No virus found in this outgoing message. Checked by AVG Anti-Virus. Version: 7.0.289 / Virus Database: 265.6.10 - Release Date: 10/01/2005 |
From: Micha N. <mi...@ne...> - 2005-01-09 13:55:07
|
Phillip Hansen wrote: > Hi, > Very new to Delphi. Got tDBF and got it working. > Cannot find anything on 'Alias'. Is it supported like in the BDE? Nope it is not supported. Most users think that is a good thing ;-) Use TableName, FilePath to specify path and file to open/create. HTH, Micha |
From: Phillip H. <ski...@fu...> - 2005-01-09 09:10:18
|
Hi, Very new to Delphi. Got tDBF and got it working. Cannot find anything on 'Alias'. Is it supported like in the BDE? Thanks ------- No matter how hard you try, you cannot baptize a cat Phillip Hansen Skil-Phil Solutions 033 2677266 082 4541247 -- Internal Virus Database is out-of-date. Checked by AVG Anti-Virus. Version: 7.0.289 / Virus Database: 265.6.7 - Release Date: 30/12/2004 |
From: Arioch /BDV/ <the...@nm...> - 2004-12-09 22:58:56
|
Hello, All! Seems i patched that long time ago, when did one of my modifications. Currently TDbf.Delete works through TDbf.Edit Since You do not override internals methods for beginning and ending deleting, that leads to a fuzzy result: after user calls .Delete TDbf fires .AfterEdit event and only after that it fires .AfterDelete I think that .BeforeEdit is also fired -- WinAMP://none: WinAMP is suffocated http://Arioch.nm.ru/FL/Fidolook_SL.png Mail: the)under(Arioch)at(nm)dot(ru ICQ: xmpp://ar...@ja... |
From: exUSSR <dr...@ma...> - 2004-10-23 12:51:07
|
> Hmm what version of TDbf are you using ? Recent versions have "...writ= e = > SetLanguageID" in that property line. I have downloaded tdbf from Torry.net VCL site. It's rather old as i see= . Ok, i'll try to use latest version. p.s. It looks like tdbf_dpk7d needs some changes in options before = compiling. I coudn't get bpl file without adding "D:\tdbf;$(DELPHI)\Projects\bpl" = strings in "search path" at Directories/Conditionals tab. There were an errors: [Error] Dbf_Reg.pas(268): Undeclared identifier: 'TDBF_MAJOR_VERSION' [Error] Dbf_Reg.pas(268): Undeclared identifier: 'TDBF_MINOR_VERSION' [Error] Dbf_Reg.pas(343): Undeclared identifier: 'DbfBasePath' -- = best regards |
From: Micha N. <mi...@ne...> - 2004-10-22 12:12:17
|
exUSSR wrote: > dbf.LanguageID := DbfLangId_RUS_866; > This expression gives me in Delphi 7 > [Error] main.pas(129): Cannot assign to a read-only property. Hmm what version of TDbf are you using ? Recent versions have "...write SetLanguageID" in that property line. Micha |
From: exUSSR <dr...@ma...> - 2004-10-22 11:20:24
|
dbf.LanguageID := DbfLangId_RUS_866; This expression gives me in Delphi 7 [Error] main.pas(129): Cannot assign to a read-only property. Although there is an example in PDF document, such as: property LanguageID: Integer read GetLanguageID write SetLanguageID; Examine LanguageID to determine the codepage, locale combination the table is using. See Dbf Lang.pas to decipher the information. SET IT before calling CreateTable to specify a codepage/locale combination for a table. .. and even "creating the table set it, for example hex 22, hungarian locale, charset 852: Dbf1. LanguageID := DbfLangId_HUN_852; ... Dbf1. CreateTableEx (...);" Ok. Trying to use several hints from tdbf forum on SourceForge: uses .. Dbf_DbfFile; DbfGlobals.DefaultCreateCodePage := 866; // or DbfGlobals.DefaultCreateCodePage := 866; doesn't matter in fact No result. Code page is anywhere except dbf file. As far as i understand, there must be a some hex value in 29 byte of dbf header depending on selected code page. How can i get this codepage in dbf file? |
From: Arioch <the...@nm...> - 2004-10-18 13:59:49
|
Hello, Karel! ??>> AS: i'd be glad if we will continue this topic in public forum, ??>> described at ??>> http://sourceforge.net/mailarchive/forum.php?thread_id=5768722&forum_i ??>> d=31400 KR> In the past I had subscribed to the tDbf forum and unsubscribed KR> later. But now I am still "somewhere" on the list, because I get KR> messages from tDbf forum, but on sourceforge.net the system says, Forum or mailist ? What is From header of mesagges ? If it is mailist - You can ask for unsubscription by sending mail to address like tdb...@li... <I don't know exactly - but guess You can easily get it form tdbf-users maillist info page on Sf's page about TDBF. If You told about SF's forum - it has no relation to maillist at all. GMane was created to give You NNTP and WW access to maillists. I use it a lot - and the only direct mails from list i got, was in one certain forum, where some subscribers were invalid, so i got tickets 'mail not delivered'. It was the only one. There would be no sense to give You WWW and NNTP access, and still spam You with all those messages. And GMane does not spam you. KR> So I preffer not to subscribe again, You need not. Just use GMane to read and reply to messages. KR> Seems simple and functional! Hmmm, waiting for Micha's reply ? :-) ??>> PS: i'd even prefer ??>> =========Beginning of the citation============== ??>> {$IfDef SUPPORT_INT64} ??>> procedure SwapInt64(const Value : int64; var Result: int64); pascal; ??>> {$Else} procedure SwapInt64(Value {EAX}, Result {EDX}: Pointer); ??>> register; {$EndIf} =========The end of the citation================ ??>> This is stricter (imagine for example SwapInt64 (nil,..)) and allows ??>> Value to be a constant, if ever needed :-) Ok, variant above needs no ??>> other source line to be changed. KR> Well, but then you have to use {$ifdef} within each call to the KR> procedure too... That is true, alas. KR> This is from Delphi 6 help: [Sorry, skipped] KR> So it seems, that cardinal also depends on CPU. Thank You. So it seems ot be good style to use Cardinal for, say, loop variables and array iterations, but when it comes about physical layout of DBF files and related variables (say, fields' values) to use LongWord instead. -- ICQ - xmpp://ar...@ja... xmpp://934...@ic... http://Arioch.nm.ru/FL/Fidolook_SL.png Mail: the_Arioch<at>nm<dot>ru |
From: Arioch <the...@nm...> - 2004-10-15 11:57:29
|
Hello, Karel! AS: i'd be glad if we will continue this topic in public forum, described at http://sourceforge.net/mailarchive/forum.php?thread_id=5768722&forum_id=31400 KR> 2) The routine SwapInt64 itself does not work, when Value and Result KR> point to the same memory - if overwrites the memory, which is read KR> later. It was far ago, but i think i made that function as function SwapInt64 (const value: Int64): Int64; pascal {forcing stack parameters passing to be compatible with some possible future Delphi 64bit}; With such a declaration @Value <> @Result ! But i can't be exactly sure what it was, i just don't remember. Agree that in current state it fails for inplace swap [Procedure (var Value_and_Result:int64)]. Micha told it was the only case where @Value = @Result, and he removed it. Anyway, in current implementation function is potentially dangerous. KR> It can be corrected in following way, or you may find some more KR> optimized one (using the xchg again): Here there is trouble that we want function to be optimised for 486 as well as Pentiums. Btw, there were some strange mixes of 386 and 486 by Cyrix and AMD as well. My 1st idea here was to re-implement function like [ Result := Value; inplace_swap(Result) ] That would be fine on modern CPU's: with their write-back cache they will determine that Result's value after 1st assignment is immediately overwritten - so CPU will not waste time storing it into RAM. But most of the 486 CPU's, having write-through cache, will waste. KR> push ebx // KR - not sure which regs should stay intact Here is again RAM used. Your variant uses 32 bit - less than 64 bit i nmine variant, but... BTW, You are free to use EAX, EDX and ECX. Other registers are to stay intact. [Sorry, skipped] KR> pop ebx // KR I think there is big probability that stack's top would not be overwritten soon after. So CPU (even most modern) will have to store it into RAM (or at least large L2 cache), and that will slow it down a bit again. So no, we have 3 registers for 4 values (@value, @result, HiDword and LoDword) But indeed we do not need to know @Value all the time! So here i present another implementation of routine. It might be a bit longer in size, since i cannot use only short instructions like MOV EAX,memory . But i don't think that would be indeed big miss. =========Beginning of the citation============== {$ifdef SUPPORT_INT64} PLargeInt = ^Int64; {$Else} PLargeInt = pointer; //let's use strict type check as far as possible; // PLargeInt = type pointer; //or even stricter, but i am not sure Delphi3 knows such a syntax. {$endif} [Sorry, skipped] procedure SwapInt64(Value {EAX}, Result {EDX}: PLargeInt); register; asm MOV ECX, dwort ptr [EAX] MOV EAX, dword ptr [EAX + 4] BSWAP ECX BSWAP EAX MOV dword ptr [EDX+4], ECX MOV dword ptr [EDX], EAX end; =========The end of the citation================ After all, here we use ECX and EAX like 1-2-1-2-1-2, which is not elegant to human, but was told to be Pentium-2 optimization tip <g> I think this routine is to be tested. I think it is correct and is not slower than current implementation (body is longer, but this will not be noticeable aside of reading and storing 64bit Value and Result). Dixi. PS: i'd even prefer =========Beginning of the citation============== {$IfDef SUPPORT_INT64} procedure SwapInt64(const Value : int64; var Result: int64); pascal; {$Else} procedure SwapInt64(Value {EAX}, Result {EDX}: Pointer); register; {$EndIf} =========The end of the citation================ This is stricter (imagine for example SwapInt64 (nil,..)) and allows Value to be a constant, if ever needed :-) Ok, variant above needs no other source line to be changed. PPS: I do not have Delphi here, can you check if Cardinal type (used for 32bit SwapInt) is CPU-specific ? AFAIR, Integer may be 16 or 32 or 64 bit, while ShortInt, SmallInt and LongInt are fixed-size. There is something like that for unsigned types - some of them are depent on CPU and some are fixed. -- ICQ - xmpp://ar...@ja... xmpp://934...@ic... http://Arioch.nm.ru/FL/Fidolook_SL.png Mail: the_Arioch<at>nm<dot>ru |
From: Arioch /BDV/ <the...@nm...> - 2004-10-15 05:21:17
|
The stars so gaily glistened... (Thu, 14 Oct 2004 20:43:37 +0400 @738) ...while the fading voice of Arioch whispered through the darkness: AB> Messages from it would be gated into this list and vice versa. AB> As well, there is RSS newsfeed in this forum, which can be added to AB> ICQ. WWW access: http://news.gmane.org/gmane.comp.lang.delphi.tdbf.user NNTP access: news://news.gmane.org/gmane.comp.lang.delphi.tdbf.user NNTP/SSL access: snews://news.gmane.org/gmane.comp.lang.delphi.tdbf.user RSS newsfeed: http://rss.gmane.org/gmane.comp.lang.delphi.tdbf.user -- WinAMP://none: WinAMP is suffocated http://Arioch.nm.ru/FL/Fidolook_SL.png Mail: the)under(Arioch)at(nm)dot(ru ICQ: xmpp://ar...@ja... |
From: Arioch /BDV/ <the...@nm...> - 2004-10-14 16:45:11
|
Hello! Welcome to the new forum. Messages from it would be gated into this list and vice versa. As well, there is RSS newsfeed in this forum, which can be added to ICQ. Welcome! -- WinAMP://none: WinAMP is suffocated http://Arioch.nm.ru/FL/Fidolook_SL.png Mail: the)under(Arioch)at(nm)dot(ru ICQ: xmpp://ar...@ja... |
From: Micha N. <mi...@ne...> - 2004-09-03 10:02:42
|
Brown, Brian D. wrote: > Hi Micha, > > Here's the actual code to just filter the first two records: > ***** ... > When the I run the filter, it shows the first three records and then > adds the second record multiple times. Please see before_filter.jpg > and after_filter.jpg, attached. > > I would think that this would be a common thing to do. Is there any way > to contact the developers since it appears that we are the only two > users on this list? Did I already reply to you? It seems I forgot, sorry for that. I am the developer ;-). The mailinglists aren't used much at all, many people seem to prefer the web forums. Actually, you are the first one mailing to this mailinglist :). So, about the problem, is it still happening, or have you solved it another way ? > I can also just add a field with a boolean value and filter for selected > records that way too. Yes, although, the filterrecord event should also work. Micha |
From: Micha N. <mi...@ne...> - 2004-07-01 19:32:30
|
Brown, Brian D. wrote: > Greetings TDBF Gurus, > > Thank you for TDBF, it is excellent! I have used it to create portions of fGIS (www.digitalgrove.net/fgis.htm). Nice :). > Is there a way to Filter for the selected records in the TDbGrid? > > Something like?: > > Accept:= (Dbf1.IsSelected); Pseudocode I assume? ;-) Should probably use DbGrid1.IsSelected or alike? > I tried to add the RecNo's of the selected records to a string list and use IndexOf, but it does not work consistently: > > Accept:= (strList.IndexOf(IntToStr(Dbf1.RecNo))<>-1) What went wrong? Micha |
From: Brown, B. D. <Bri...@dn...> - 2004-07-01 15:26:15
|
Greetings TDBF Gurus, Thank you for TDBF, it is excellent! I have used it to create portions = of fGIS (www.digitalgrove.net/fgis.htm). Is there a way to Filter for the selected records in the TDbGrid? Something like?: Accept:=3D (Dbf1.IsSelected); I tried to add the RecNo's of the selected records to a string list and = use IndexOf, but it does not work consistently: Accept:=3D (strList.IndexOf(IntToStr(Dbf1.RecNo))<>-1) Thanks for your help, Brian B. |
From: <ben...@id...> - 2004-05-22 12:22:54
|
Dear Open Source developer I am doing a research project on "Fun and Software Development" in which I kindly invite you to participate. You will find the online survey under http://fasd.ethz.ch/qsf/. The questionnaire consists of 53 questions and you will need about 15 minutes to complete it. With the FASD project (Fun and Software Development) we want to define the motivational significance of fun when software developers decide to engage in Open Source projects. What is special about our research project is that a similar survey is planned with software developers in commercial firms. This procedure allows the immediate comparison between the involved individuals and the conditions of production of these two development models. Thus we hope to obtain substantial new insights to the phenomenon of Open Source Development. With many thanks for your participation, Benno Luthiger PS: The results of the survey will be published under http://www.isu.unizh.ch/fuehrung/blprojects/FASD/. We have set up the mailing list fa...@we... for this study. Please see http://fasd.ethz.ch/qsf/mailinglist_en.html for registration to this mailing list. _______________________________________________________________________ Benno Luthiger Swiss Federal Institute of Technology Zurich 8092 Zurich Mail: benno.luthiger(at)id.ethz.ch _______________________________________________________________________ |