Jump to content

Tom Chamberlain

Members
  • Content Count

    67
  • Joined

  • Last visited

Community Reputation

47 Excellent

About Tom Chamberlain

  • Birthday December 24

Technical Information

  • Delphi-Version
    Delphi 11 Alexandria

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Tom Chamberlain

    Buying a mini pc to install Delphi

    If your daily machine, PC or MAC has 16GB of RAM, is a multi-core CPU and has 100-150GB of free space go with a virtual machine. There are free options like Hyper-V and VirtualBox even VMwares Workstation/Fusion is free for personal use. Delphi will run in a VM with 4-6GB of RAM and a 2 cores, not speedy but it will run. You can get a real copy of Windows 10/11 for cheap online and it's easy to backup with just a file copy.
  2. Tom Chamberlain

    Which ODBC driver version is used by FireDac

    Use the TFDConnection object's GetInfoReport() method, it takes a string list. It shows everything you want to know about the connection and the driver it used/picked. We have this on our login/splash screen hidden behind a TLabel double-click event because we were having the same types of issues. Also look into the FDDrivers.ini file configuration. ================================ Connection definition parameters ================================ DriverID=MSSQL Database=******* User_Name=******* Password=***** ODBCAdvanced=TrustServerCertificate=Yes; MARS=Yes Server=192.168.56.109 VariantFormat=String ExtendedMetaData=True ================================ FireDAC info ================================ Tool = RAD Studio 12 FireDAC = 29.0.51961.7529 Platform = Windows 32 bit Defines = FireDAC_NOLOCALE_META;FireDAC_MONITOR ================================ Client info ================================ Loading driver MSSQL ... Loading odbc32.dll driver manager Creating ODBC environment handle Searching for ODBC driver ... Checking for ODBC driver [ODBC DRIVER 18 FOR SQL SERVER] ... Found [ODBC Driver 18 for SQL Server] Driver Manager version = 03.81.19041.0000 ================================ Session info ================================ Checking session ... Warning: The client [18.3.3.0.0] and server [16.0.0.0.0] major versions difference > 1. Warning: MS ODBC 11 does not support SQL_VARIANT data type. Warning: SQL Server 2016 and compatibility level >= 130 may lead to DATETIME comparision failure. Current catalog = Current schema = dbo Driver name = msodbcsql18.dll Driver version = 18.03.0003 Driver conformance = 3 DBMS name = Microsoft SQL Server DBMS version = 16.00.1130
  3. Tom Chamberlain

    Using same form for adding and editing data

    Depends on the complexity of the data needed to create the record(s). The our app can have many child records for a parent, but requires at least one child, so we use a 'wizard' type screen for creating these initial records. Our app is 25+yrs old, we have a mix of DB-aware for the the oldest forms, client datasets and even TMS string grids have been used to store data, but for 95% of all your 250+ tables we use one form for all create, view and edit of data. If a table contains multiple records we use a grid of some type with a panel that we show/hide depending on the status of the selected record to create/edit the data. We force the users to click an Edit button to change 99% of any data and then an Save or Cancel button.
  4. Tom Chamberlain

    Visually edit a custom component

    You may want to look at frames. https://docwiki.embarcadero.com/RADStudio/Alexandria/en/Working_with_Frames Different functionality and usage than creating a real component but may be what you are looking for. I have never used frames myself, but have several custom components to combine TEdit's, TComboBox's and TButton's into a TPanel that are added to a TScrollbox on the fly with different data in each.
  5. Tom Chamberlain

    Do runtime created forms close the TFDQuery connections?

    Depends where the TFDConnection is defined, are you using a shared data module or creating it in the form? Is it pooled?
  6. Tom Chamberlain

    Help to find database error

    The problem is the procedure is declared to a class that does not exist: Should be: procedure TfrmDatabaseTutorial.ShowSelectResults();
  7. Tom Chamberlain

    Project Options -> Version Info aka. dproj madness

    We use a set of shared resource files, one for the EXE's and another for the DLL's (the filetype changes) and leave the IDE out of it. We have our own mass build process for production (the only time we care about the version numbers and things) with the option to update the version number, it changes and rebuilds the resource files before starting any compiles so we always have the correct versions for production.
  8. Tom Chamberlain

    Trap TFDConnection error on data module create etc?

    No, not just for that feature I really like the component naming, renaming and replacement features. Makes migrating/upgrade older projects faster and the Tab Order as a tree saves time.
  9. Tom Chamberlain

    Trap TFDConnection error on data module create etc?

    We prevent this issue with GExperts -> Set Component Properties and having it set the Active and Connected properties to False on all DB components before compiling. It does it automatically so we don't have to remember to do it 🙂 One of the best features of GExperts for us.
  10. Tom Chamberlain

    Backup of files + mysql

    Your joking right? Is your database so large that it is not in a virtual server (hopefully on redundant hardware) with at least some sort of enterprise backup solution at a VM level? Is the client so small or so cheap they do not understand this is not a software vendors job? This sounds like a 'sales job' making you to come up with a solution for a non-problem or a completely incompetent IT service. I am betting on the latter. Sarcasm: Tell them they need an SAS 18TB LTO tape drive attached to the server and something old-school like Restrospec or Backup Exec installed on the server for file-level backups and about 10-12 hours of down time each night to do the backups. Don't forget to include someone has to swap that tape every day and they will need at least 100+ tapes for daily's, weekly's and monthly offsite storage. Maybe you should offer to pickup the backups every morning and keep them safe offsite for them, for a extra fee of course. Sorry I slipped into a 1990's rant there, just glad I do not have to deal with this type of thing anymore. Not making fun of anyone who still has to deal with tape backups I know their value to large organizations and disaster recovery plans.
  11. Tom Chamberlain

    Feedback Request - FastReports vs ReportBuilder?

    We have also been using ReportBuilder Enterprise for 15+ years since QuickReports was not capable of somethings we wanted to do so many years ago. 100's of reports later and that doesn't count the 'End User' reports the users have created themselves. When COVID hit switching to emailing reports and invoice's saved so much time and paper, we have gone paperless and are not going back. We have not had any performance issues (that were not self-inflicted) and when we have had technical issues, support is fast and responsive with patches. I would also recommend ReportBuilder.
  12. Tom Chamberlain

    Good book about FireDAC

    Cary Jensen has a book that is pretty good, https://www.amazon.com/Delphi-Depth-Cary-Jensen-Ph-D/dp/1546391274
  13. Tom Chamberlain

    Problems with Delphi class structure / visibility

    The one thing no one has pointed out: Unit1 TClass1 PropertyA Unit2 Uses Unit1 {the unit name, not the class inside the unit name} Another useful link is https://docwiki.embarcadero.com/RADStudio/Alexandria/en/Programs_and_Units_(Delphi)
  14. Tom Chamberlain

    Message Broker??

    If you own D11.3 Enterprise or Architect and all your apps are Delphi then you can create your own solution with DataSnap. You can use the TDSClientCallbackChannelManager to register client applications with a DataSnap server. Your client applications make function/procedure calls to the DataSnap server using regular types and classes to do what you want, DataSnap will do all the marshalling for you both ways. We use such processes to track concurrent usage with a 'user' object we pass that contains user name, machine name, IP, database they are connected to, etc. We have created our own 'message' structure that allows us to send notifications to individual clients or all registered clients via the callback or issue 'commands' to the clients to close the application gracefully if the user forget to logout at the end of the day. The callback from the server sends a TJSONValue so you can build a simple or very complex message architecture. (Interacting with the client GUI requires some TThead.Queue calls but this will be true of any solution) If your apps use multiple languages then something like ActiveMQ, ZeroMQ, RabbitMQ, etc. would be a better solution, but if your apps are all Delphi you may already have the tools/tech you need. That said, if you have more than 5,000 active clients I would not use DataSnap, but look for something that scales better than DataSnap. We are small and only have 20-30 active clients at most so DataSnap is a simple and flexible solution for us.
  15. Tom Chamberlain

    D11 Update 1 + FireDAC + ODBC to Sage returning wrong data!

    Interesting, we only call CoInit/CoUnInit in new threads before/after new connections are created/freed, never in the main (GUI) thread which has DB queries and data-aware components (to many, but 20+yr old code) but only one shared DB connection for the GUI in a data module. But every thread inside services get CoInit/CoUnInit's. We have only ever used M$/SQL, used the BDE for the first 5yrs and switched to ADO in 2003 or 2004 which has be sufficient for our needs until changes to M$/SQL date field types have forced us to make the switch to FireDac and the latest ODBC SQL drivers. We have had some learning pain's with FireDac but nothing like theses issues.
×