|
Seems to me that your problem isn't Devexpress, but the implementation of it.
Anyway...
Sometimes the best solution is to start over, and when you do, use the tools you know best.
|
|
|
|
|
Planned to start later this year. Yes, implementation is a bigger problem than DevExpress.
But let's just say I am not impressed with libraries that use catch {} (hours of my life I will not get back), nor am I impressed with ORMs that defaults to deferred deletion so in-experienced developers start using it without understanding how it is implemented (that was fun getting a large in-production database cleaned up). It does of course help the people writing the ORM at least knows how a guid is sorted by various databases... oh wait... they don't (or at least didn't on the version I looked at it).
|
|
|
|
|
Never knew there was more than one way to sort a GUID.
Googled it.
|
|
|
|
|
Wow! I had the same revelation.
Actually it never occurred to me to sort GUIDs. In my mind they were the epitome of randomly assigned, meaningless numbers. Why sort them?
Mircea
|
|
|
|
|
They are generated sequential because random data is horrible for efficient indexes in large databases. Earlier versions of guids where constructed with the mac address + timestamp + a random component. Due to security concerns of leaking mac addresses (real or not) and the increase of software generated mac addresses this was changed. But some databases do - for compatibility reasons - keep the ordering based on the bytes that used to contain the timestamp.
|
|
|
|
|
I think my logic and database logic are slightly different. Good thing we don't meet very often
If you need "sequential GUIDs" why not just use a counter? Peano's Axioms basically say: if you've got enough bits, I've got enough numbers. If you want to make them unique over a number of different computers just add a computer GUID. In essence that's what version 1 and version 2 GUIDs do, except that they use a supposedly unique MAC address.
Now I'll go my merry way trying to keep away from databases as much as I can
Mircea
|
|
|
|
|
I inherited the project designed this way. One of the reasons given was a request to be able to clone the database and update it in different locations (no, the whole world does not yet have internet), but obviously that was never realized - and the problems that would need to be solved to support data merge are so huge that dealing with integer ids at the same time is not exactly making it a lot worse.
The projects where I was responsible for the initial data design use integer ids - though if there is a specific use case that is served by using a guid as primary key in a low volume table I will of course do it. Typically anything above the data layer I simply lie and claim the ID is a string (or a struct of some kind) no matter what it is in the database. I do not want a UI to break because of something as trivial as changing primary key format in a table. Sure, gives a bit more conversion, but nothing that compares to the time spend waiting for data from the database.
|
|
|
|
|
lmoelleb wrote: random data is horrible for efficient indexes in large databases
Not necessarily so, it would depend on how the database is used.
Random keys are good for writes.
If you have a sequential key all inserts happens in the same leaf node at the end of the index which leads to waits because of pagelocks. Same goes for updates since most updates happens on fresh data.
If you use a random key, all writes happen at random places which means pagelocks are more seldom a problem. Also, the index tend to stay balanced.
The drawback with random keys is that they cause page splits.
On a simple index this isn't a problem since it would happen every hundredth insert or so, but If the table is clustered the amount of page splits could probably cause serious performance issues.
So, don't cluster a table on a random key since the drawbacks are serious and the advantage (index scan) is gone.
|
|
|
|
|
We use Telerik, calling stored procedures that provide the data. The stored procedure, like a view, isolates us somewhat from the actual table and column names.
|
|
|
|
|
Because of history (thousands of reports) we still use ActiveReports (GrapeCity) to actually generate the report.
However for editing reports (end-user) we use DevExpress. It works and has good support.
If today we would start fresh we probably would go with DevExpress...
"The only place where Success comes before Work is in the dictionary." Vidal Sassoon, 1928 - 2012
|
|
|
|
|
ActiveReports is my favorite report writer. I ditched CrystalReports many years ago.
|
|
|
|
|
Why not try the original[^]?
Software rusts. Simon Stephenson, ca 1994. So does this signature. me, 2012
|
|
|
|
|
Where would Sander find an IBM 1401 today? Would it even fit into his house office? Could he afford the electricity bill for one of those dinosaurs?
(To say nothing of getting tech support via séance...)
Freedom is the freedom to say that two plus two make four. If that is granted, all else follows.
-- 6079 Smith W.
|
|
|
|
|
Daniel Pfeffer wrote: Where would Sander find an IBM 1401 today?
On the more serious side: RPG II became a standard report generator for more than one computer generation - more like a human generation
I saw RPG II in use in the 1980s, and according to Wikipedia, it is still in use, including for MS-Windows. We have the rule "If it works, don't fix it!" and apparently, RPG II still works (in some places).
|
|
|
|
|
Wouldn't be the first time Ouija boards were involved in an alternative to using CR.
|
|
|
|
|
I worked on a 1401 once as an IBM Customer Engineer.
|
|
|
|
|
Still better than Crystal Reports!
|
|
|
|
|
We use SSRS still for a lot of our reports, but that is because we are cheap bastards with the reporting. We do have plans to stop using SSRS in place of another product at some time. SSRS is ugly but it works and it is fully compatible with VS and Sql Server, etc.
|
|
|
|
|
|
Hand-coding PDF margins etc??
For most reporting, I tend to use HTML. If it's simple enough to use data-bound repeaters / grids, embed them in the page then render them on the server into an HTML string. For more complex reports combine that with external templates. Then shoot the resulting HTML into an HTML -> PDF converter (I use Pechkin, even though it has a bunch of dependencies and is 32-bit; but it generates a good result). That way all I need to do is adjust the HTML template or on-page data controls. Once the PDF is done, hide the data controls and show the page with a link to the PDF, or just redirect to the PDF - depending on requirements.
|
|
|
|
|
Yeah, hard-coding, but that's not very different from the HTML to PDF generators I've used.
My problem with HTML to PDF is that HTML is not created for a fixed size (A4, in my case).
It literally doesn't know pages, so a footer or a header is very difficult.
All in all, I didn't like it.
Hard coding means you have to tweak once, but at least it won't change as both your hard coding and A4 size remain the same.
Unfortunately, the same can't be said about HTML formatting.
|
|
|
|
|
I haven't had any reporting needs for years now, but back when, I grew so tired of Crystal Reports that I converted everything I could and used this one instead:
Perpetuum Soft Report Sharp-Shooter[^]
As far as I recall, it was much easier to work with than Crystal...
Anything that is unrelated to elephants is irrelephant Anonymous
- The problem with quotes on the internet is that you can never tell if they're genuine Winston Churchill, 1944
- Never argue with a fool. Onlookers may not be able to tell the difference. Mark Twain
|
|
|
|
|
For most of my 23 years programming, I've used Seagate/Crystal Reports/Crystal Decisions/Business Objects for reports in both desktop and web development. Lately, we have switched over to DevExpress which I really like. No ORMs for either one, just feed them a datatable, parameters, and formula fields.
I'll also use straight up HTML for reports when the paging is somewhat predictable.
"Go forth into the source" - Neal Morse
"Hope is contagious"
|
|
|
|
|
The only reason I would use a reporting tool is to simplify my code. Giving "users" access to the database is a support nightmare.....
Oh, wait. I'm a consultant and paid for support - never mind
Charlie Gilley
“They who can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety.” BF, 1759
Has never been more appropriate.
|
|
|
|
|
"CONSULTING If you're not a part of the solution, there's good money to be made in prolonging the problem." -- Despair dot com
|
|
|
|