• CCCPinConstruction (unregistered) in reply to Obi Wan

    Have to agree with someone further up, you know very little about Access security (amongst other Access things judging by your writeup) - and what version were you using??? That article, which deals with only one aspect of security, dates back to a version of Access that was replaced in 1995...

    You're right about preferring just about any other database for what you wanted to do, but there's no need to overstuff the pie...

  • TroelsL (unregistered) in reply to CCCPinConstruction

    Ok, my mistake guys (referring to the KB security issue) I finally found that particular article I was referring to, and it is not from an official MS site, so I humbly retract that statement.

    And as someone claimed, I am by no means an Access or VB expert. Thank god!

    Oh, and those who felt sorry for me will be glad to learn that I now have a second job while studying. I'm now working with Oracle Forms and Oracle Application Express.

    I'm very much looking forward to graduation and actually working with something that isn't as "user friendly" as these tools (Forms, Access, APEX) claim to be.

  • TheBilliardPlayer (unregistered)

    I don't want to be nasty here, but the real wtf is this:

    A company that exclusively uses Microsoft products hired you to do a job, and you want them to change to using MySQL and PHP?

    So were you going to document a procedure for backing up and restoring their MySQL database? More likely you just wanted a tool you knew, and then after you finished the job some poor (worse paid) IT sap is left trying to apply patches to MySQL, etc.

    I could go on about "A bad workman always blames his tools", but seriously: you had a programming language (VB - more lines of production code written in VB than any other language), a database (ever hear of the Data Abstraction Layer? If you'd used one the change to SQL Server wouldn't even have affected your VB Code, just write a new DAO). Why are we getting into PHP, MySQL, SQL Server?

    Picture it from the IT guy's perspective: "They hired some 'College Hotshot' to write some app, the guy comes in, gets paid twice what I'm paid, and starts demanding we alter the IT landscape of the company just to make his job easier?!?! Now he's back in college, and I have to write and format reports for the business users, because they only knew how to do it in Access, and now we're using SQL Server"...

    My 2 cents...

  • Fedaykin (unregistered)

    So I have to say it.

    It wouldn't be hard to put an Aerostar engine in a Mustang. In fact, if the two cars are of similar vintage it's probably the same engine (thought the Mustang will have other engine options).

    Now, a better analogy would be putting an F-350 diesel into a Mustang. That would be difficult, perhaps impossible.

    ;)

  • TheBilliardPlayer (unregistered)

    Almost forgot this:

    Crazy requirements, lousy database, high-paid/low-skilled consultants, great, we've all dealt with that at some point, and that's why most of us are reading thedailywtf.

    But you managed to get a company (a company which lacked the skills) to install "linuxy" software (ie, software that they don't understand) when there was no real reason? The TCO (ie, cost of hiring IT staff who can support this app) makes your solution the real wtf.

    If you had something working (VB on Access), and it ran at 2mph because Access was a bottleneck, I would have liked to have read that WTF.

  • TroelsL (unregistered)

    TheBilliardPlayer:

    I was never told they exclusively used MS products until later on (when they changed their minds on PHP, and wanted me to do it in .Net, which I had volunteered at an earlier meeting). I told them that the two most obvious technologies would be ASP.Net or PHP, seeing as it would integrate with MS Live Maps.

    Same with MySQL, I didn't know they already had an MSSQL Server running. When I was told, I time and time again suggested using that instead of Access at it would take care of all security, concurrency and backup issues. Coding a data abstraction layer would've taking a lot of time compared to using the upscaling wizard in MSSQL.

  • TheBilliardPlayer (unregistered) in reply to TroelsL
    TroelsL:
    I tried to push MySQL as I had worked with that a lot before. But that wasn't possible, I was told. Because everyone (in the strategic apex of the firm) knew Access, and no one knew MySQL, so they wouldn't know how to create reports in that. Being a rookie in a new job, I didn't want to push too hard, so I bowed to coporate pressure.
    Like I said, you need to realise the IT department has to support the app after you've gone on to (hopefully) better things.
    TroelsL:
    The company's IT department was outsourced to a large, international TLA(Three letter acronym) company, and for reasons unknown insisted on using solely Microsoft software.
    Google for "Total Cost of Ownership (TCO)" and you'll find the reason (right or wrong, companies find it cheaper to hire IT folk to work with Microsoft products)
    TroelsL:
    The reports they needed were very limited, and it was a lot easier to just create all thinkable reports in PHP. They IT department eventually agreed on PHP after a series of questions in this line: "But doesn't PHP require Linux?" "Will PHP run on IIS?" "Are you sure IIS can run PHP scripts?"
    This is what I'm getting at. It was "easier" for you to use PHP, not for them! And then you go and make fun of the IT guy who doesn't know about Linux and PHP!
    TroelsL:
    Now, naturally, as a mere mortal, I can not myself upload anything to the server, so I email any changes to the network admin, who then extracts a zip file on top of the other files. (This being the guy who thought PHP was "a linux program"). Many a time, I've considered simply putting a PHP upload script into that zip file, and be done with it.
    Again with the attitude "These guys are making my job difficult". I just want you to stop for a second and consider from their point of view how difficult you're making their jobs!

    Ok, I'm just making these comments cos I've been here before, and I think you'll find that these types of jobs go a lot smoother when you consider where the IT and Business people are coming from, and try to work with them rather that think of them as a nuisance.

  • David W. Fenton (unregistered) in reply to TroelsL

    I hate these kinds of articles about Access. I'm a professional Access developer and have been for over 10 years. I would never suggest Access (or the Jet database engine) for a project like this, any more than I'd suggest that you use a hammer to put in a screw. So, nobody would disagree that Access was a poor choice as a front end to a graphically based app (that happens to be data driven).

    But Access is actually a very fine front end for proper database applications. With its built-in Jet database engine (free clue: Access is a front-end development tool, not a database; Jet is the database that is Access's native engine; but Access can connect to a huge number of back ends, including SQL Server, MySQL, Oracle, anything that has drivers available that Access can communicate with, ISAMs, ODBC or ADO). There are Access front ends out there running against SQL Server with 10,000 users (and I'm talking MDB + ODBC, not ADP + OLEDB). And they run just fine and dandy.

    Where people most often screw up with Access is in trying to use a monolithic MDB file for storing both data and the application front end. Now, the Jet database engine, being file-server based (and having no server-side process communicating with the clients) has limited ability to support large populations of WRITE users (it can support up to 255 read-only users). But when you exceed that, you can easily port your data store over to a server database of your choice, SQL Server, MySQL, PostgreSQL or whatever you like. If you've designed your front end application well, this won't be hard -- I usually start recommend upsizing when the concurrent user count starts exceeding 15 on a regular basis, though I design even the smallest apps with efficiency of data retrieval in mind from the beginning (which works very well when you convert to a C/S back end).

    The thing that most inexperienced Access developers miss is that each user of an Access application needs an individual copy of the front end, with tables linked to the back-end data source (Jet or whatever). The reason for this is that the Access front end is a Jet MDB, so it is subject to the same user limitations as a Jet data MDB, i.e., 255 max read-only users and far fewer write users.

    You may think "But the users aren't editing the forms and reports, so this would be read-only, right?" Well, no. Since Access automatically saves certain properties of forms (such as filters and sorts), the forms get written to, and when you're sharing it with multiple users, these writes can collide and cause unexpected results. Thus, it's required that every user have a copy of the front end.

    Storing the app locally on the desktop doesn't seem to bother most people with apps like Excel and Word, but it seems to annoy DB developers, because they often have a web-based bias, where you have a single codebase run by everyone.

    But they forget that it's not being run by multiple people, but by a single HTTP deamon -- it's only the web server that's connecting with multiple users. An Access app is a desktop application, not a web app, so the front-end app is by definition going to need to be distributed, just as with other desktop apps.

    Many people who are used to sharing a front end MDB are annoyed at the "problems" this raises for distributing changes to the front end. But it's really a rather trivial problem to address, quite easily resolved by using updaters like Tony Toews's (http://www.granite.ab.ca/access/autofe.htm), or even batch files or logon scripts.

    On the subject of security, yes, Jet user-level security is weak (Access itself has no security -- it gets its user-level security from the Jet db engine, and with Access 2007, the new version of Jet, called ACE and with the ACCDB file format has abandoned Jet user-level security (though you can still use it in A2K7 with MDBs)), precisely because of the file-based nature of the Jet database engine. If it's inadequate to your purposes, then you need to migrate to a back-end database engine that provides the security you require.

    Again, this is not a flaw of Access -- it's a matter of choosing tools that are appropriate to the problem set.

    -- David W. Fenton David Fenton Associates http://dfenton.com/DFA/

  • Bob G0ats3 (unregistered)

    FIST!!!!!11!one!!

  • not impressed (unregistered) in reply to TroelsL

    what a bunch of crappy decision making from a pompous noob dev

    I certainly hope your pay was low

  • nickf (unregistered)

    When I was in college, I wanted to get a leg over some of my fellow students too...

  • Barney (unregistered) in reply to not impressed

    Sounded like an attempt of the OP to try and look like a local hero but instead appears as a total n00b. The real wtf is that he posted the story.

  • (cs) in reply to Belcat

    Screw the Access or SQL Server debate, I wanna know how World of Salescraft turned out! Can one obtain a +1 Roladex? A Palm Pilot of Protection? A cone of cold-call spell?

    Don't leave us hanging!

  • Rev. Spaminator (unregistered) in reply to TheBilliardPlayer

    I've been on both sides of this argument. Overall, I have to side with TroelsL. Sounds like some lazy IT guys who only want to learn one way of doing things.

  • Andrey Vul (unregistered) in reply to MechanicJay
    MechanicJay:
    "Yes, Troels thought, in the same way a Ford Aerostar's engine can be dropped into a Mustang."

    Actually, the Cologne family of V6 engines were used in both the Aerostar and the Mustang.

    Try again.

    ... in the same way a Ford F-350's engine can be dropped into a Focus.

  • Russ (unregistered) in reply to Carra
    Carra:
    SQL Server licenses were too expensive, he was told.

    Wtf? What about MySql, PostgresSql,...

    SQL Express..

  • (cs) in reply to David W. Fenton
    David W. Fenton:
    But they forget that it's *not* being run by multiple people, but by a single HTTP deamon -- it's only the web server that's connecting with multiple users.
    *cough, sputter, spew coffee on keyboard* WTF?
  • Alex Girgoriev (unregistered) in reply to TheBilliardPlayer
    TheBilliardPlayer:
    I could go on about "A bad workman always blames his tools",

    As we Russians say: For a bad dancer, his balls always get in the way

  • Watson (unregistered) in reply to TheBilliardPlayer
    TheBilliardPlayer:
    (VB - more lines of production code written in VB than any other language)
    Now THIS is the line that made me spew coffee out of my nose.
  • Pyro (unregistered)

    First they map their competition on the globe with access and encarta and then quickly destroy the competition using Ion Cannon Control plugin ;)

  • (cs) in reply to Nicolas V.

    [quote user="Nicolas V."][quote user="SneWs"]Please tell me this is a joke, since it's just not possible to be that "dumb"!? Have to feel sorry for the poor lad trying to implement that knd of app with access and VB... vb, vb. hmmm, when ever has vb been usfull!?[/quote]

    Ever heard of C# and .NET, why use a old and outdated language syntax like VB, all code written in VB.NET should be burned on the spot. ( Note, this is not anything personal, just VB'ish )

  • (cs) in reply to FredSaw
    FredSaw:
    David W. Fenton:
    But they forget that it's *not* being run by multiple people, but by a single HTTP deamon -- it's only the web server that's connecting with multiple users.
    *cough, sputter, spew coffee on keyboard* WTF?
    Indeed!
  • ben (unregistered) in reply to David W. Fenton

    "I would never suggest Access (or the Jet database engine) for a project like this, any more than I'd suggest that you use a hammer to put in a screw."

    The point of a good database is that it's good for any job and any project and programmers don't have to worry about it too much, and you don't have to hire a monkey to tinker about with some stupid toy product and tell you you're doing it wrong. You wouldn't understand how this works because you've spent ten years "developing" on and basing your career around a piece of garbage that you admit you would never even suggest for a serious project.

  • blindman (unregistered) in reply to ben
    ben:
    The point of a good database is that it's good for any job and any project and programmers don't have to worry about it too much
    Not true. This is only one feature of a database to evaluate. There is a niche for fast, cheap development for small businesses, and Access fills it well. I do 90% of my work with SQL Server and/or Oracle, but occasionally still develop in Access for small applications. Enough of the Access bashing! It is a tool, and it can be used appropriately or inappropriately just like any other tool. The more you bash it, the more you demonstrate your ignorance. Frankly, there are a million "applications" out there using EXCEL as a datastore that are just begging to be upgraded to MS Access.
  • fajensen (unregistered) in reply to TroelsL
    TroelsL:
    ...Sure, the pay is less than that of a McDonalds employee, and I have learned almost nothing about the technical aspect of software development...

    I disagree. You have learned everything you need/want to know about software development!!

    sez he who is quitting and going back to engineering ...

  • (cs) in reply to TheBilliardPlayer
    TheBilliardPlayer:
    Picture it from the IT guy's perspective: "They hired some 'College Hotshot' to write some app, the guy comes in, gets paid *twice* what I'm paid.."
    TroelsL:
    ...Sure, the pay is less than that of a McDonalds employee...
    Which means the IT guy's getting paid less than half of what a McDonalds employee makes.
    TheBilliardPlayer:
    My 2 cents...
    Exactly.
  • Self Aware (unregistered) in reply to TroelsL

    "Anyway, the project is still not completed, as decision making in this company requires 5 top level executives to sacrifice a virgin goat during the second stage of the equinox. I'm still in college, 6 months away from getting my degree."

    I hope your company is not situated in College Station, because executive decisions can never be made regardless of the sun's position.

  • Anonymous (unregistered) in reply to David W. Fenton
    David W. Fenton:
    I hate these kinds of articles about Access. I'm a professional Access developer
    Wait, what?
  • david (unregistered) in reply to TroelsL
    TroelsL:
    Of course, the user can still just hold shift as Access starts and completely bypass all "security" measures.

    Access security dates from a time when Windows and DOS had no security or user login, and has never been updated or corrected. But even so, it was never that stupid: that's just ignorance.

  • david (unregistered) in reply to david
    david:
    TroelsL:
    Of course, the user can still just hold shift as Access starts and completely bypass all "security" measures.

    Access security dates from a time when Windows and DOS had no security or user login (it's older than WEP), and has never been updated or corrected. But even so, it was never that stupid: that's just ignorance.

  • Tony Toews (unregistered) in reply to TroelsL
    TroelsL:
    Interesting fact: the native string in Access VB has a max length of 512 characters.. One of the things I learned quickly)

    This is incorrect. There are some situations in queries and importing of data when only the first 255 characters on memo fields will be passed. But there are easy work arounds for the most part.

    From the Access 2007 help

    There are two kinds of strings: variable-length and fixed-length strings.

    • A variable-length string can contain up to approximately 2 billion (2^31) characters.
    • A fixed-length string can contain 1 to approximately 64K (2^16) characters.

    Sample code follows illustrating a brute force and ignorance bit of code: (Hopefully it is readable in this posting.)

    Sub TestString()

    Dim strTest As String

    strTest = "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf

    MsgBox Len(strTest) & vbCrLf & strTest

    End Sub

    Tony Toews, Microsoft Access MVP

  • Brice Richard (unregistered) in reply to TroelsL

    Apparently, you aren't familiar enough with MS Access to do anything constructive with it.

    I've been working with MS Access for almost 8 years - nonstop in development and deployment of various applications.

    While your particular project certainly was a viable candidate for using larger scale tools, if the company was on the tightest of budgets to which you suggested, an Access database front end would have worked just fine.

    Your first error unless I'm misunderstanding what you are saying, that "Access VB has a max length of 512 characters" - really? I certainly can dimension a string in VBA using more than 512 characters....in fact, the literature suggests that you can dimension a (fixed-length) string variable in VBA of up to 65,400 characters! So, I'm not sure how you coded your VBA strings but you aren't doing it correctly if you think the max string length in VBA is only 512 chars...

    Second issue I have with your remarks on MS Access is about security......while it may be very difficult to secure an Access database due to its inherent open architecture, it's not impossible.....just to let you know, the Shift key (called the bypass key in the literature) can be secured but you have to write code to disable it. You can also write code to hide your database window against prying eyes.....you can also write code to disable the F11 key which will otherwise show the database window....you can also disable what are called "Access Special Keys" which will further ensure security....after you do this then you disable the toolbars programmatically in a way that inhibits the user from direcly accessing them. You can also protect your code by password protecting your VBA project and/or converting your MDB into an ecrypted MDE file.

    These security measures are more than enough to protect an MS Access database against the average user. However, if you need yet a higher level of security, the highest of all security measures would be to encrypt your tables (because they are otherwise open to importation into new database files EVEN with the aforementioned security measures in place).

    The Rijndael encryption algorithm for VBA does exist on the web and can be successfully deployed within an Access database to scramble all table data in an MDB file.

    So before you go off on a rant about how underrated and lacking MS Access is, perhaps your company should have hired an Access expert in the field instead of some hack college kid who specializes in nothing, but who's knowledge is scattered so thin throughout the IT field that no intelligently informed decision on ANY piece of technology can be accurately made.

  • TroelsL (unregistered)

    If you'll read my previous posts, I said that I was mistaken in my statement about string length in VB, and that it came from a non-MS knowledgebase. The problem was with passing the strings.

    And no, I have very little experience in Access. My quarrel with the security is this:

    Access markets itself (at least as far as I have seen) as a userfriendly database/database frontend. In order to get the level of security you talk about, you need an advanced knowledge of Access. That defeats the purpose of having a user friendly piece of software.

    I don't know how it is where you are located, but it would be very hard to find an "Access expert" over here, as most people who study databases for a while, seem to seek towards various other DBMS. Just an observation, not an opinion.

    I've already stated that Access is fine for some applications, but I still don't think this was one of them.

    And as I've also already said, the (original) WTF was not really about Access, but more about insisting on using Access for months, then after a single comment from a network admin, changing to MSSQL, meaning that those months of work were more or less wasted.

    I still don't like Access. Because I am simply not the target audience of it. I prefer writing my own SQL over building it with a GUI-based query builder. SQL is the same (or should be, anyway) across most DBMS (even Access), and instead of learning to find my way in a GUI-environment, it is easier for me to find a connection string for whatever DBMS and programming language I'm using, and just use the SQL I'm already used to.

    It's all a matter of taste, but I know I'm hardly the only developer to prefer other technologies to Access by default.

  • Not sure (unregistered) in reply to TroelsL

    coding a DAL is pretty simple these days... there are nice projects out there like subsonic or data access application block

  • ? (unregistered) in reply to TroelsL
    TroelsL:
    Oh, and a funny side fact: According to Microsofts own knowledge base, the way to protect a form from unauthorized entry is the following:

    Drag a fullscreen text field across all elements of the form. Have another text field for password entry. If the password is correct, hide the first text field. Of course, the user can still just hold shift as Access starts and completely bypass all "security" measures.

    Well..., this shift thing can be disabled. There is a per-.mdb file setting for that. I suspect users can press CTRL+G anyway and hide the said field programmatically from the debug console anyway.

  • 54543534 (unregistered) in reply to Tony Toews
    Tony Toews:
    TroelsL:
    Interesting fact: the native string in Access VB has a max length of 512 characters.. One of the things I learned quickly)

    This is incorrect. There are some situations in queries and importing of data when only the first 255 characters on memo fields will be passed. But there are easy work arounds for the most part.

    From the Access 2007 help

    There are two kinds of strings: variable-length and fixed-length strings.

    • A variable-length string can contain up to approximately 2 billion (2^31) characters.
    • A fixed-length string can contain 1 to approximately 64K (2^16) characters.

    Sample code follows illustrating a brute force and ignorance bit of code: (Hopefully it is readable in this posting.)

    Sub TestString()

    Dim strTest As String

    strTest = "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "fuck the world678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf & _ "12345678901234567890123456789012345678901234567890" & vbCrLf

    MsgBox Len(strTest) & vbCrLf & strTest

    End Sub

    Tony Toews, Microsoft Access MVP

Leave a comment on “Access Abomination ”

Log In or post as a guest

Replying to comment #:

« Return to Article