Hans J. Ellingsgaard
Members-
Content Count
81 -
Joined
-
Last visited
Everything posted by Hans J. Ellingsgaard
-
Best Practices for FireDAC FetchMode/RecordCount Settings
Hans J. Ellingsgaard replied to Larry Hengen's topic in Databases
To fetch all the records from a table to get the record count is in most cases a bad praxis. If it's a table with a lot of records, you will just put a lot unnessisary strain on the database server. A count(*) query, on the other hand, has a very limited impact on the server. -
Best Practices for FireDAC FetchMode/RecordCount Settings
Hans J. Ellingsgaard replied to Larry Hengen's topic in Databases
You can use an extra query with a count(*) to get the number of records. -
Have you tried IBExpert?
-
You can analyze your queries in IBExpert, but you need the paid version to be able to see all the details.
-
How to connect from remote program to Datasnap serwer located in local network
Hans J. Ellingsgaard replied to Andrzej Miechowicz's topic in Network, Cloud and Web
You will need a vpn connection between the datasnap server and the local network. SQL queries over an internet line is very slow, but if it's only a few records, maybe you can live with it. You would be better of writing some REST services to communicate between the two hosts. -
What is the best way LoadFromFile & Thread? (FMX)
Hans J. Ellingsgaard replied to pieomy00's topic in FMX
I'm no expert in threads, but I'm shure that a LoadFromFile should be synchronized. As stated above the try/finally is pointless. If you only have these two commands in the thread, and both will be synchronized, there will be no point in putting them in a thread. It will probably just slow your program down. -
Firebird is free. With Interbase you will have to pay for a license. I'm shure that both will serve you well, with RDBMS or as embedded.
-
But you would get rid of all the trouble of sync‘ing the data, if you kept the data on the server. With a REST service you will probably be able to load the data much faster, and save a lot of bandwith - at least if you are on a slow network.
-
Why is my firebird database code unstable under load? (code included)
Hans J. Ellingsgaard replied to Yaron's topic in Databases
MS SQL server can have deadlocks, just like any other database. -
Why is my firebird database code unstable under load? (code included)
Hans J. Ellingsgaard replied to Yaron's topic in Databases
You can minimize the deadlock problem, if you call starttransaction just before the ExecSQL, and call CommitTransaction right after ExecSQL. Then you also can make a controlled RollBack in case of an error. -
SYSDSO Credentials are not Working When Connecting to an Encrypted Interbase Database
Hans J. Ellingsgaard replied to MikeMon's topic in Databases
For Interbase the default username and password has been SYSDBA and masterkey, has it changed in later versions? -
Yes you'r right. I was thinking about a single user client with multiple datamodules.
-
You could have just one FDConnection, and let all the other datamodules use that connection. You would then have just one place to set up all your connection logic, And by the way... Some SQL servers have licens restrictions on how many simultanious connections you can have, and if your are using one connection for each datamodule, you could easily end up being unable to connect to the SQL server.
-
Why are you not using ApplyUpdates to delete the marked records from the database?
-
Refresh Current Record To Access Value Of Newly Inserted AutoInc Field
Hans J. Ellingsgaard replied to Nathan Wild's topic in Databases
If you can call the Generator directly, like in Interbase/Firebird and other db's, I would prefer that approach. I can't find any documentation that this is possible with Pervasive db's, but you can check it out. Create a query that calls the Generator and wrap it in a function like this. (The example is made in Interbase syntax). function GetGenID(GeneratorName: string): integer; begin with FDQGetGenID do begin SQL.Clear; SQL.ADD('SELECT GEN_ID ('+GeneratorName+', 1) from rdb$database'); Open; Result := Fields[0].AsInteger; Close; end; end; Then when you insert new data you will call the GetGenID function. FDQuery.insert; FDQueryID.Value:=GetGenID('GeneratorName'); FDQueryMASTERDATA.AsString:= 'Some value'; FDQuery.Post; You can also place the call to GetGenID in the FDQuery events, like OnNewRecord or BeforeInsert. --- If this approach is not possible with Pervasive, then this approach could work. It is at least working with Interbase. In this example I have used a DBGrid and A DataSource component to connect to the FDQuery. And the query has two fields called "ID" and "MASTERDATA". Set the AutoGenerator parameter value of ID field to arAutoInc (if you've not already done so). In the OnDataChange Event of the DataSource put the following code: if (FDQMasterID.Value < 0) and (FDQMaster.State in [dsInsert]) and not FDQMasterMASTERDATA.IsNull then begin FDQMaster.Post; FDQMaster.Refresh; end; You need to check if at least one of the fields has a value apart from the ID field, or you will get an error on the Post command, if the user adds to empty records. -
You need to close and open the query every time you change the parameter values, if it has a result set.
-
You can use FDMemTables, they can load and save from streams, files and other datasets.
-
Best site/source for SQL Server questions?
Hans J. Ellingsgaard replied to Lars Fosdal's topic in Databases
Yes, I can see that from your link. It came as a surprice to me, as I am mostly used to work with IB and Firebird databases. There is at NOLOCK isolationlevel, that will minimize risk of locking, but it will not be suitable, if there is a risk of data being changed during the execution of the query. Another thing to do is to make sure that all the fields in the where clause and the joins are indexed to avoid tablescans. -
Best site/source for SQL Server questions?
Hans J. Ellingsgaard replied to Lars Fosdal's topic in Databases
It sounds strange. You should never get a lock on a read only query. If you have many concurrent users, you could have drop of performance, but not locks. -
version control system Version Control System
Hans J. Ellingsgaard replied to Soji's topic in Delphi IDE and APIs
Bitbucket is a great versioning system based on git. You can have 5 users for free, so you can always give it a try. It works well with Sourcetree as a client. It,s also easy to integrate with Jira.- 49 replies
-
- git
- subversion
-
(and 1 more)
Tagged with:
-
any suggestions on how to "lazy load" a BLOB/CLOB from Oracle DB?
Hans J. Ellingsgaard replied to David Schwartz's topic in Databases
You can do it with two queries. Make one query that select's all the fields that you want in the grid (don't use "select *", use the wanted fieldnames instead). Then make another query with a parameter that select's the clob field for one record only. Like this: select [clob field] from [table name] where [Primary Field ID] = :ParameterName Then you open the second query after the first query has entered the wanted record. The parameter will get it's value from the first query. There might be an event on the grid you can use - I don't know the DevEx grid. You can also use the AfterScroll event of the dataset to open the second query. If you use the second approach, you will need to have a delay on the opening of the second query, or it will open after all scrolled records. You can use a timer to have a small delay. Disable it on the BeforeScroll event and enable it on the AfterScroll event. The delay should just be long enough to make shure that it is not triggering while the user is scrolling. -
Delphi Tokyo - Is FDConnection manager broken ? - Need advice connecting MsSQL DB
Hans J. Ellingsgaard replied to Stéphane Wierzbicki's topic in Databases
If your sql server is not on the same machine as your client, it might be that you don't have the right sql driver verison. Look into the ODBC Data Source Administrator for what version of sql driver you have. E.g for a SQL server 2008 you need at least a version 10.00. I'm not sure wich version you need for server 2012, but it is probably at bit higher than that. You can download the correct version from Microsoft. -
General DB access question -- paging query results
Hans J. Ellingsgaard replied to David Schwartz's topic in Databases
Livebingings will not make any difference here. It's the design of your queries, and your database components, that will make all the difference. -
General DB access question -- paging query results
Hans J. Ellingsgaard replied to David Schwartz's topic in Databases
If you get an error that says data field is missing, it's because some of the fields that you excluded from your query are connected to a dataaware component. The easiest way to find that component is to search for the field directly in the dfm file, and there you can see wich component they are assigned to. -
General DB access question -- paging query results
Hans J. Ellingsgaard replied to David Schwartz's topic in Databases
Your problem has nothing to with with Delphi, and C#/.net can not handle it any better. If you are using BDE, you will need to switch to FireDac. FireDac datasets has parameters for how many records to load at a time. A good advice is also not to use 'select * ', but instead use 'select fieldname from'. FireDac is really fast and can easily handle db's with million og records.