Presentation on theme: "From MySQL to SiR via ODBC John S. Lemon. From MySQL to SiR via ODBC How did it start ? Interdivisional rivalry / power complex- Calls are being delayed."— Presentation transcript:
From MySQL to SiR via ODBC John S. Lemon
From MySQL to SiR via ODBC How did it start ? Interdivisional rivalry / power complex- Calls are being delayed longer this year in your division and this is reflecting on the service Had to prove it in 24 hours before weekly division managers meeting.
From MySQL to SiR via ODBC Summary Initial crude solution – ODBC & SPSS hoist by own petard - too successful MySQL extractions no help – bugs / features Re-think Need to automate / replicate Use vPQL + ODBC > SiR > SPSS
From MySQL to SiR via ODBC Problem Needed to know poor response rates. System provided reports and charts were no help
From MySQL to SiR via ODBC Problem Charts and tables geared towards management Gave overall views but fail to answer detailed questions Why ?
From MySQL to SiR via ODBC Problem Organisation is the problem Calls can enter at any point not just top Then migrate anywhere
From MySQL to SiR via ODBC Problem Charts and tables geared towards management Didnt show movement between subgroups Only times were Open and Close So if call closed by subgroup X then reports allocated total time to X even if 90% was in Y !!!
From MySQL to SiR via ODBC ODBC and SPSS Use ODBC from SPSS to extract data Create two files and manipulate within SPSS Merge and Aggregate create data file Still not good enough as limited cross record functions
From MySQL to SiR via ODBC ODBC and SPSS Use my SPSS2SiR routines ? No – one-off and time constrained – hadnt used for some years so ….. ? Save As fixed ASCII from SPSS Create simple data base in SiR Allowed cross record functions
From MySQL to SiR via ODBC ODBC and SPSS Crude but effective solution Unfortunately not end of problem Hoist by my own petard –A petard is an explosive device used to break down doors or walls with a slow burning fuse –Sometimes the burn was not as slow as the bomb placer would like.
From MySQL to SiR via ODBC My Petard Met the deadline – but …. Management requested more detail and complexity Actually heard that the phrase was – If it is not your ….ing division that needs a kick up the a..e ! Then whose does.
From MySQL to SiR via ODBC My Petard Also wanted weekly updates Using SPSS route wasnt practical –Cumbersome –Crude –Had tailored process for one division –So couldnt be easily extended or automated Back to drawing board
From MySQL to SiR via ODBC Next Step – First thoughts MySQL data base - so obvious answer Use MySQL queries to generate data files –Even though updates were via SiR vPQL generated SQL code thought might work –Few more grey hairs later – no success –Dump data out and read into SiR Feature – no last column !!
From MySQL to SiR via ODBC Next Step – Second thoughts ODBC worked for MySQL to SPSS so why not use for this Dave Doulton uses a lot so … it must be good ! How to do it ? Direct into SiR
From MySQL to SiR via ODBC Next Step – Second thoughts Appeared to work well However –Many very short records for describing the action –Also many actions missing Why ? Took some while to crack the reason
From MySQL to SiR via ODBC Next Step – Second thoughts LF / CR
From MySQL to SiR via ODBC Next Step – Second thoughts Why was this important ? Whatever I was doing ( right or wrong ) SiR treated it as end of record Truncated MySQL records and so missed out the important bit !!
From MySQL to SiR via ODBC Next Step – Second thoughts
From MySQL to SiR via ODBC Next Step – Third thoughts Back to the drawing board Have to write a vPQL programme How ? Obvious thing RTFM Read The Fine Manual You thought I was going say Flipping ! Or something else !!
From MySQL to SiR via ODBC Next Step – Third thoughts Actually not a manual –( how many are nowadays ? ) Help files – complete with sample program RTFHF doesnt flow as easily off the tongue as RTFM Didnt quite understand all the options Now for a bit of history
From MySQL to SiR via ODBC PROGRAM INTEGER*4 errid conid statid rnum cnum STRING*20 cname colval STRING*80 qtext errstr CONNECT conid SERVER 'ODBC' DATABASE 'Company' USER 'me' PASSWORD 'mypwd,COMPANY,HIGH,HIGH' PREFIX 'c:\SIR2002\TEST\' ERROR errid STATEMENT statid CONNECT conid ERROR errid WRITE errid PREPARE STATEMENT statid CONNECT conid COMMAND 'SELECT * FROM EMPLOYEE' ERROR errid WRITE errid EXECUTE STATEMENT statid CONNECT conid ERROR errid WRITE errid COMPUTE cnum = COLCOUNT (conid,statid) COMPUTE rnum = ROWCOUNT (conid,statid) WRITE 'Columns returned ' cnum ' Rows returned ' rnum FOR I = 1,cnum. COMPUTE cname = COLNAME (conid,statid,i). WRITE cname END FOR SET J (0) LOOP. COMPUTE j = j+1. COMPUTE res = NEXTROW (conid,statid). IF (res LE 0) EXIT LOOP. FOR I = 1,cnum. IFTHEN (COLTYPE(conid,statid,i) eq 1). COMPUTE colval = COLVALS (conid,statid,j,i). ELSE. COMPUTE colval = FORMAT (COLVALN (conid,statid,j,i)). ENDIF. WRITE colval. END FOR END LOOP DELETE STATEMENT statid CONNECT conid DISCONNECT conid END PROGRAM The Good old days ?
From MySQL to SiR via ODBC Progress ? Number of basic crucial commands to get ODBC data –CONNECT –STATEMENT –PREPARE STATEMENT –EXECUTE STATEMENT –DELETE STATEMENT –DISCONNECT After RTFHFing still had problems
From MySQL to SiR via ODBC Progress ? Just couldnt get a connection or anything Solution – David Baxter !!! As usual came to rescue – problem solved Still not sure why – just happy it does
From MySQL to SiR via ODBC Progress ? This is the help file suggestion CONNECT conid SERVER 'ODBC' DATABASE 'Company' USER 'me' PASSWORD 'mypwd,COMPANY,HIGH,HIGH' PREFIX 'c:\SIR2002\TEST\' ERROR errid This is what I (we!!) got to work CONNECT conid SERVER 'ODBC DATABASE 'Supportworks ODBC USER 'train01 PASSWORD 'train01 PREFIX ' ERROR errid
From MySQL to SiR via ODBC Progress ? Cant re-read / re-extract a column Why would you want to com045-user identifier com- department code If needed then extract twice ODBC doesnt complain !!! Or extract to string and chop up which is what I did for Date/Time vars
From MySQL to SiR via ODBC Progress ? COMPUTE TEMP468= COLVALS ( conid, statid, ROWNUM, 4 ); TEMP4D = CDATE ( ( SBST ( TEMP468, 1, 10 ) ), 'DDIMMIYYYY' ); TEMP4T = CTIME ( ( SBST ( TEMP468, 12, 8 ) ), 'HHIMMISS' ); Extract the MySQL Date/Time variable into a string ( COLVALS ) Then chop out the bit you want and convert to date or time Numeric values need COLVALN COMPUTE TEMP2 = COLVALN ( conid, statid, ROWNUM, 2 );
From MySQL to SiR via ODBC SiR wins Typical output but presents problem Start date and end date but no intermediates Generate dummy records
From MySQL to SiR via ODBC Hindsight Would I use ODBC again ? Yes – with what I know now I would not attempt extracting data from two MySQL tables and merge them in ODBC query statement SiR does it more cleanly Would be more careful in the planning.