Jump to content

mvanrijnen

Members
  • Content Count

    455
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by mvanrijnen

  1. mvanrijnen

    FireDAC and pooling random error

    That is tricky, you should not do that, maybe the underlaying physicaldb class takes care of you for this, but with most db types, you must not practise this. (i can not forbid you todo 🙂 ). See this: http://docwiki.embarcadero.com/RADStudio/Rio/en/Multithreading_(FireDAC) I have some troubles with a new project too, with MT and FD, probably some (yet) unidentified loading from a thread in a datamodule which is purely running mainthread.
  2. mvanrijnen

    More performance Stringgrid sorting algorithm help

    1st You constantly assign the strings of the stringlist, do you do this within a beginupdate/endupdate ? 2nd Not want to be too harsh, but looks not good to be a final solution that code.
  3. Hello, maybe someone can help me out with the following problem, serverside resource See following code, i post a request for updating something, serverside can not find body? this is what the post request, posts to the server (captured with fiddler): POST http://pc-pcname:8080/appointments/21140 HTTP/1.1 Connection: Keep-Alive Content-Type: application/json Accept: application/json, text/plain; q=0.9, text/html;q=0.8, Accept-Charset: utf-8, *;q=0.8 User-Agent: Embarcadero RESTClient/1.0 Content-Length: 435 Host: pc-ict1:8080 application/json{"ID":21140,"Description":"blah blah blah" "UpdateState":0} Server Side: procedure TAppoinmentResource.PostAppointment(const AContext: TEndpointContext; const ARequest: TEndpointRequest; const AResponse: TEndpointResponse); var jsonobj : TJSONObject; begin if ARequest.Body.TryGetObject(jsonobj) then begin // do something with the jsonobject end; end; Client Side procedure TPlannerRestClient.UpdateAppointment(const AAppointment: TPlannerAPIAppointment); var request : TRESTRequest; jsonstring : string; jsonobject : TJSONObject; begin request := NewRequest(resAppointment, TRESTRequestMethod.rmPOST); try request.ResourceSuffix := AAppointment.ID.ToString; // todo fix serialization TgoBsonSerializer.Serialize(AAppointment, jsonstring); jsonobject := TJSONObject.ParseJSONValue(jsonstring) as TJSONObject; request.ClearBody; request.AddBody(jsonobject); request.Execute; finally jsonobject.Free request.Free; end; end; Somebody a hint what i'm doing wrong?
  4. mvanrijnen

    TEndpointRequest, can not get body (json)

    Problem solved itself after restarting Delphi and clear all dcu's from the build. strange but true.
  5. maybe this is usable: https://blog.grijjy.com/2018/02/28/javascripting-with-duktape-for-delphi/ (those guys write pretty good code)
  6. Look out with the TZipFile class, there is a bug which causes empty zips when it gets too large (or you insert very big files) i posted a bug a few years ago. (i go search if it's fixed) can not find it, but problem is that it did execute normally without raising an exception, but you end(ed) up with an empty zip file.
  7. So, where does this leave us? EMB did not test D10.4 on Vmware/HyperV guests? Or they did and just decided to bother us with this ?
  8. mvanrijnen

    Are we just "Cash Cows"?

    for a fact my first official programming classes where in COBOL 🙂 very long time ago.
  9. mvanrijnen

    Are we just "Cash Cows"?

    Not read the whole thread, but this is my opinion. Delphi comes to me as a product for which you pay full price (a lot more then VisualStudio), with less capabilities/tooling, but the most painfull, it seems/looks like it is being developed as a opensource project with some projectmanagers and a varying dev team. They really should sit on their customers seat for a while and get a new perspective on how to go forward with Delphi. It's a wonderful language with enough possibilities, would be a shame if we would have to go look around for another dev platform if quality does not improve. At the moment it;s not future proof.
  10. Hey guys, Installed D10.4 in a HyperV guest (Win10Pro, 16GBmem, 4 procs). We notice very slow Options dialogs now, takes more then 10seconds to open the Delphi->Tools->Options dialog, also the project options dialogs are very slow? More people with these complaints? Someone with a hint to better performance?
  11. mvanrijnen

    Why does GetIt require Delphi to restart so often?

    Sometimes, it seems that with GetIt you just start an installer, and the rest is the same as if you downloaded the installer outside delphi. For this i think they need to restart Delphi, because otherwise adjustments in Paths etc will not be recognized in the running instance of delphi?
  12. mvanrijnen

    Analyze interbase slow queries

    Something whats bothering me a few months now, Is there anybody who knows how to best analyze your application for slow (eg non-indexed or wrong indexed queries), with most databases you can set some switches and they will be logged. With interbase i never found something like that, yes you can output some lowlevel data with firedac but it does not give a (fast) usable result. Anybody some tips, or some tooling for his?
  13. mvanrijnen

    Analyze interbase slow queries

    Yes i know that one already, but thats realtime, not exactly what i'm looking for., thnx though.
  14. We are now expecting some handy tool ofcourse :)
  15. mvanrijnen

    You RAD Studio 10.4 Sydney appreciated features and bug fixes

    I like the record initialziation/finalization, but i was working on something i can use it for, and got this: procedure THSNullableBooleanSerializer.Serialize(const AValue; const AWriter: IgoBsonBaseWriter); var jsonvalue : THSNullableBoolean absolute AValue; begin // do stuff end; [dcc32 Error] HESI.NullableTypes.pas(158): E2634 Declaring a managed record with absolute directive is not allowed hmz, to bad ....
  16. mvanrijnen

    Active Directory authentication

    That or just find some information on how to access a LDAP server, AD is an extended LDAP server. (if you search delphi ldap activedirectory, you will find examples)
  17. mvanrijnen

    swagger help needed

    i mean v2 instead v1 sorry for that. I just see that the swagger def i use, has went to v3, work to do 🙂
  18. mvanrijnen

    swagger help needed

    I also for fun run the C# generator, on the swagger def i'm using, and the generated code is similar to that i generate in Delphi. You always will have: - your "data classes", with lists (arrays in my case). - A big class which implements all the various methods (gets, puts, deletes etc, this will be what your calling from your own client application - A base client class which does the "lowlevel" http /json etc stuff. C# is not that different from Delphi, i think they are very similar, they have the same designer "Anders Hejlsberg". It's only that the base code and libs of c# is far more extended then delphi ever will be now days. The partial classes in C# , mainly (as far a i have seen), is handy for seperating forms and there code.
  19. mvanrijnen

    swagger help needed

    I'v created my own swagger (json) to delphi creator. It creates some model classes, and a base api client, all the models from swagger can be placed in one file, or every class in a separate file. Currently only working with Swagger v1 json. I try to put a version online when i get it working with the v3 specs. I (we) have written a base json client, which can do several methods of authentication, on top on that, i created a base SwaggerClient, and on top of that you get the generated base client, with al the base api calls following the swagger defintion. example of calling the SWGParser and DelphiGenerator (its not 100% ready :), the parses should return an swaggermodel, which would be given to the generator for example). If you have a swagger.json (v1) then i could try to generate the files for you. procedure TfrmSWGTest.CreateFromSwaggerButton9Click(Sender: TObject); var parser : TSWGParser; generator : TSWGDelphiGenerator; begin parser := TSWGParser.Create; try parser.Parse('C:\MySources\MyCompany\Applicaties\MyApplication\Source\API\Source\MySwagger_File.json'); generator := TSWGDelphiGenerator.Create; try generator.APIName := 'MyApplicationAPI'; generator.FilePrefix := 'MyCompany.'; generator.TypePrefix := 'MyApplicationAPI'; generator.ModulSubName := 'DTO'; generator.HTTPMethodPrefix := '/monitoring'; generator.ExcludeHTTPMethodName := True; generator.IncludeCodeComments := False; generator.SingleDTOFile := True; generator.Generate(parser, 'C:\MySources\MyCompany\Applicaties\MyApplication\Source\API\Generated'); finally generator.Free; end; finally parser.Free; end; end;
×