Question

Is it Possible to Export Progress tables to CSV Files

Asked by: csimmons1324

I am working with the ERP system Syteline (v.6.01) which uses a Progress database.  Is there a way to export the data of a given table, say the Customer table, to a csv file?  If so, what is the code to do so?  Will the csv file cotain the field names?

Thanks,

Chris

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2007-07-05 at 12:54:34ID22677785
Tags

progress

,

export

,

database

,

csv

,

Progress

Topics

4GL Databases

,

Databases Miscellaneous

Participating Experts
5
Points
500
Comments
16

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. Progress Bar
    Hi I'm new to VB and need help with the progress bar control. I'm reading a CSV file containing record details into a table. This part is working fine, but I thought it would be nice to show a progress bar as it tranferring the data. The CSV file can contain records from ...
  2. asp/csv export
    hi all having some 'issues' with csv files. I'm now using Response.ContentType="application/CSV" Response.AddHeader "Content-Disposition", "filename="+client+"-list.csv;" dim strField, sDelimiter, CSVhead sDelimiter = ",...
  3. Progress DB File
    Hello, I am supplied with a Progress 6.2 DB File, and I want to export the tables and their contents to a text file, how am I going to do this? As a first step, exporting the layout would be nice. Regards, Black Spider
  4. Progress Box
    Hi, I need to creating something like a progress box. From my app, when i click save in the SDialog, how can i do something like once i click OK, there will be a Progress Box appear but at the backend, it's saving my document. SaveFileDialog SDialog = new SaveFileDialog(); ...
  5. Export in Progress message in DIV tag
    HI All, As always, EE has been my last resort. For things I dont find on Google, I find solutions in EE. I have a classic ASP page, where I select a month & hit Next, Now the next ASP page gives me a CSV report. I have to have a Export to CSV in Progress msg in this fi...

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: cpkilekofpPosted on 2007-07-05 at 14:59:59ID: 19427782

I may be wrong, but I believe Progress data files ARE CSV.

 

by: SohvatPosted on 2007-07-18 at 22:56:56ID: 19519612

Hello
Here is a simple example, I have used

/* This simple progam creates "model.csv" csv-file of the selected part of the table "model"
   The model.csv is created to samba-shared directory. So you may open it directory with
   excel from windows environment.
  This example does not include header area to the csv -file.
  if you want also the header to the csv -file, then you must leave off the
  "no-box no-labels -expression.
*/
output to /sambashared-directory/model.csv.
for each model where model.name = "mymodel" no-lock by model.number:
    display  model.number ";" model.name ";" model.phone ";" model.address ";" model.zip with no-box no-labels.
end.
output close.



 

by: dlauzonPosted on 2007-09-04 at 12:44:34ID: 19827909

If you have access to the Progress tool named "Data Administration", you can just go to the menu "Admin" --> "Dump Data And Definitions" --> "Table Contents (.d file)..." and then select the table you want to dump.  It will be dumped to a space delimited file, but you can easily open it with Excel saying that the delimiter is a space and then save it as a csv or any other Excel compatible format.

 

by: progressorPosted on 2007-11-22 at 16:36:02ID: 20336801

Well first some comments on the comment:

Progress has no CSV datafiles...
The second answer: If you want to exprt data to CSV then use the export statement in stead of the display statement. The display statement always output with the default display format of a field. In a Progress database fields or not limited to any size (well, ok 32K per record). So this could give a problem with the data you dump.

If you use export then the data is dumped as a space delimited list of all fields in a record.
You have to have a development license to do that.
Same applies for using the data administration to dump data.

If you don' t have a development license then maybe SQL is the best way to get the data.

I don' know syteline, what version of Progress is that (cat $DLC/version).




 

by: dlauzonPosted on 2007-11-23 at 05:35:54ID: 20338681

The EXPORT statement supports the DELIMITER parameter.  The first example shows the simplest way to dump a whole "customer" table.
The first example doesn't output the field names.
The second example does output the field names as the first line of the csv file.

/* first exemple */
OUTPUT TO customer.csv.
 
FOR EACH customer:
  EXPORT DELIMITER ";" customer.
END.
 
OUTPUT CLOSE. 
 
/* Second example */
DEFINE VARIABLE hBufferHandle  AS HANDLE    NO-UNDO.
DEFINE VARIABLE hFieldHandle   AS HANDLE    NO-UNDO.
DEFINE VARIABLE iCounter       AS INTEGER   NO-UNDO.
DEFINE VARIABLE cFieldNameList AS CHARACTER NO-UNDO.
 
hBufferHandle = BUFFER Customer:HANDLE.
 
DO iCounter = 1 TO hBufferHandle:NUM-FIELDS:
  ASSIGN
   hFieldHandle   = hBufferHandle:BUFFER-FIELD(iCounter)
   cFieldNameList = cFieldNameList + hFieldHandle:NAME + ";"
   /*uncomment following line and comment preceeding line if you want to dump the field's label instead of it's name*/
/*   cFieldNameList = cFieldNameList + hFieldHandle:LABEL + ";"*/
  .
END.
cFieldNameList = RIGHT-TRIM(cFieldNameList, ";").
 
OUTPUT TO customer.csv.
PUT UNFORMATTED cFieldNameList SKIP.
FOR EACH Customer NO-LOCK:
  EXPORT DELIMITER ";" Customer.
END.
OUTPUT CLOSE.

                                              
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:

Select allOpen in new window

 

by: progressorPosted on 2007-11-23 at 14:39:08ID: 20340954

Although dlauzon already gave the correct answer, here is some code which works on any database which can dump table content in with any given delimiter.
The program can dump all tables or a specified one.

DEFINE VARIABLE cDir AS CHARACTER  NO-UNDO.
DEFINE VARIABLE hQuery AS HANDLE     NO-UNDO.
DEFINE VARIABLE hBuffer AS HANDLE     NO-UNDO.
DEFINE VARIABLE iTmp AS INTEGER    NO-UNDO.
DEFINE VARIABLE iTmp2 AS INTEGER     NO-UNDO.
 
DEFINE STREAM sOut.
 
/* comment this line to dump all tables or change tablename to dump another table */
&Scoped-define TABLE-NAME customer
 
/* change this if you want different Delimiter then semi-colon */
&SCOPED-DEFINE Delim ~';~'
 
/* comment/uncomment eiter of next two statements to put in the first row fieldnames or fieldlabels*/
/* if you don't want either of them comment both */
&SCOPED-DEFINE FieldNames *
&SCOPED-DEFINE FielLabels *
 
/* output directory */
ASSIGN cDir = 'C:\temp\'.
 
FOR EACH _file WHERE   &IF DEFINED(TABLE-NAME)
                       &THEN
                       _file._file-name = '{&TABLE-NAME}' AND
                       &endif
                       _file._hidden = NO NO-LOCK:
 
    OUTPUT STREAM sOut TO VALUE(cDir + _file._file-name + '.csv').
 
    
    CREATE BUFFER hBuffer FOR TABLE _file._file-name.
    
    CREATE QUERY hQuery.
 
    hQuery:ADD-BUFFER(hBuffer).
 
    hQuery:QUERY-PREPARE("FOR EACH " + hBuffer:NAME + " NO-LOCK").
 
    hQuery:QUERY-OPEN().
 
    hQuery:GET-FIRST().
 
    &IF DEFINED(FieldNames) > 0 &THEN
        DO iTmp = 1 TO hBuffer:NUM-FIELDS:
            PUT STREAM sOut UNFORMATTED hBuffer:BUFFER-FIELD(iTmp):NAME {&Delim}.
        END.
        PUT STREAM sOut SKIP.
    &ELSEIF DEFINED(FielLabels) &THEN
        DO iTmp = 1 TO hBuffer:NUM-FIELDS:
            PUT STREAM sOut UNFORMATTED hBuffer:BUFFER-FIELD(iTmp):LABEL {&Delim}.
        END.
        PUT STREAM sOut SKIP.    
    &ENDIF
    
    DO WHILE NOT hQuery:QUERY-OFF-END:
 
        DO  iTmp = 1 TO hBuffer:NUM-FIELDS:
            IF hBuffer:BUFFER-FIELD(iTmp):EXTENT = 0
            THEN DO:
                IF hbuffer:BUFFER-FIELD(iTmp):DATA-TYPE = "CHARACTER"
                THEN PUT STREAM sOut UNFORMATTED '"' hBuffer:BUFFER-FIELD(iTmp):BUFFER-VALUE '"' {&Delim}.
                ELSE PUT STREAM sOut UNFORMATTED hBuffer:BUFFER-FIELD(iTmp):BUFFER-VALUE {&Delim}.
            END.
            ELSE DO iTmp2 = 1 TO hBuffer:BUFFER-FIELD(iTmp):EXTENT: /* it is an extent field so we walk through the extents */
                IF hBuffer:BUFFER-FIELD(iTmp):DATA-TYPE = "CHARACTER"
                THEN PUT STREAM sOut UNFORMATTED '"' hBuffer:BUFFER-FIELD(iTmp):BUFFER-VALUE(iTmp2) '"' {&Delim}.
                ELSE PUT STREAM sOut UNFORMATTED hBuffer:BUFFER-FIELD(iTmp):BUFFER-VALUE(iTmp2) {&Delim}.
            END.
        END.
        PUT STREAM sOut SKIP.
        
        hQuery:GET-NEXT().
    END.
 
    /* cleanup and close */
    hQuery:QUERY-CLOSE().
    DELETE OBJECT hBuffer.
    DELETE OBJECT hQuery.
    OUTPUT STREAM sOut CLOSE.
 
END.

                                              
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:

Select allOpen in new window

 

by: csimmons1324Posted on 2007-11-27 at 08:46:21ID: 20359232

Progressor,

I tried your code and received the following errors when checking the syntax:

Multi-level attribute references allowed only for com-handles. (5713)
**  Could not understand line 46. (196)
Multi-level attribute references allowed only for com-handles. (5713)
**  Could not understand line 59. (198)

Any thoughts?

Thanks,

Chris

 

by: dlauzonPosted on 2007-11-27 at 08:49:40ID: 20359264

Your are using a version of Progress prior to something like 9.1D where multi-level was allowed for attributes.
What version of Progress are you using?

 

by: csimmons1324Posted on 2007-11-27 at 12:41:45ID: 20361135

Progress is version 9.1C18

 

by: dlauzonPosted on 2007-11-27 at 12:48:56ID: 20361197

So close, but yet so far...

I'm not sure what's there and not there in 9.1C, but concerning multi-level, you'll have, for example, to change every:

hBuffer:BUFFER-FIELD(iTmp):NAME
for (where the variable hBufferField is previously defined):
hBufferField = hBuffer:BUFFER-FIELD(iTmp).
and then use hBufferField:NAME instead of hBuffer:BUFFER-FIELD(iTmp):NAME

If you don't need to dump tables not know in advance, I would recommend using my solution in this thread (ID 20338681) which would be much simpler when you don't need all the dynamic stuff.

 

by: csimmons1324Posted on 2007-11-27 at 12:53:35ID: 20361225

When you say "dynamic stuff" what exactly are you referring to?  Sorry, I am new to this whole progress database thing.

 

by: dlauzonPosted on 2007-11-27 at 13:09:40ID: 20361335

The sample by progressor permits to deal with an unknown table, i.e. a table for which we don't know the characteristics at the time the program is compiled (number of fields, datatype of fields) - that would be useful for, say, a program that would ask the user "What's the name of the table you want me to dump?".  All this info has to be found dynamically (i.e. at runtime) by looking at the database schema and by using properties to "inspect" the characteristics of the table we wan't.

In my first example, using statements that can process a know table, it takes 5 code lines to dump the content of a table.

You can replace "customer" in my sample by any other known table name and it will also work.

By the way, we've talked about code doing what you want to do, but if you have it installed, there's a Progress program that you can just pick some tables from, give a file name and it will do the job.   In Windows, it is called "Data Administration" (might be the same in Unix, I don't know).  In the menu "Admin", there's a sub-menu called "Dump Data and Definitions" and in that sub-menu, there's an entry called "Table Contents (.d file)...".  From there, it pops a Window where you select the tables, press Ok, give a file name, press Ok, Et Voila!

 

by: progressorPosted on 2007-11-27 at 15:53:59ID: 20362318

Sorry for that, but I didn't know your Progress version. I believe multi level atribute reference is only possible since 9.1D.
I agree with dlauzon, his example is much simpler and you get the same results. I just thought it would be nice to give a dynamic example with some 'build-in' features like choosing table, output dir ectcetera.

Under unix it is called data administration as well BTW, you can only dump data that way if you have developper license on that box.
If you don't have developper license then just go with the example dlauzon gave you or use the data administration on your development machine to dump the data and import it as a space delimited list in Excel.

 

by: progressorPosted on 2007-11-28 at 02:34:07ID: 20364438

Unfortunately I don't have 9.1C anymore (it is already a very old version).
But this sample at least fixes the issue with multi level atribute reference.

Programming with dynamic queries can have its advantages and disadvantages, depending on the situation. In this case it can be handy because this program will dump data from any database, not just this particular one. Furthermore you only need this one program to write to achieve this, otherwise you have to write it for every table you want to dump. This can be an advantage.
On the other hand dynamic programming has lots more code lines as you can see and it's much less clear and straightforward regarding the purpose of the program, use of indexes etc.

DEFINE VARIABLE cDir AS CHARACTER  NO-UNDO.
DEFINE VARIABLE hQuery AS HANDLE     NO-UNDO.
DEFINE VARIABLE hBuffer AS HANDLE     NO-UNDO.
DEFINE VARIABLE hBufField AS HANDLE     NO-UNDO.
DEFINE VARIABLE iTmp AS INTEGER    NO-UNDO.
DEFINE VARIABLE iTmp2 AS INTEGER     NO-UNDO.
 
DEFINE STREAM sOut.
 
/* comment this line to dump all tables or change tablename to dump another table */
&Scoped-define TABLE-NAME customer
 
/* change this if you want different Delimiter then semi-colon */
&SCOPED-DEFINE Delim ~';~'
 
/* comment/uncomment eiter of next two statements to put in the first row fieldnames or fieldlabels*/
/* if you don't want either of them comment both */
&SCOPED-DEFINE FieldNames *
&SCOPED-DEFINE FielLabels *
 
/* output directory */
ASSIGN cDir = 'C:\temp\'.
 
FOR EACH _file WHERE   &IF DEFINED(TABLE-NAME)
                       &THEN
                       _file._file-name = '{&TABLE-NAME}' AND
                       &endif
                       _file._hidden = NO NO-LOCK:
 
    OUTPUT STREAM sOut TO VALUE(cDir + _file._file-name + '.csv').
 
    
    CREATE BUFFER hBuffer FOR TABLE _file._file-name.
    
    CREATE QUERY hQuery.
 
    hQuery:ADD-BUFFER(hBuffer).
 
    hQuery:QUERY-PREPARE("FOR EACH " + hBuffer:NAME + " NO-LOCK").
 
    hQuery:QUERY-OPEN().
 
    hQuery:GET-FIRST().
 
    &IF DEFINED(FieldNames) > 0 &THEN
        DO iTmp = 1 TO hBuffer:NUM-FIELDS:
            ASSIGN hBufField = hBuffer:BUFFER-FIELD(iTmp).
            PUT STREAM sOut UNFORMATTED hBufField:NAME {&Delim}.
        END.
        PUT STREAM sOut SKIP.
    &ELSEIF DEFINED(FielLabels) &THEN
        DO iTmp = 1 TO hBuffer:NUM-FIELDS:
            ASSIGN hBufField = hBuffer:BUFFER-FIELD(iTmp).
            PUT STREAM sOut UNFORMATTED hBufField:LABEL {&Delim}.
        END.
        PUT STREAM sOut SKIP.    
    &ENDIF
    
    DO WHILE NOT hQuery:QUERY-OFF-END:
 
        DO  iTmp = 1 TO hBuffer:NUM-FIELDS:
            ASSIGN hBufField = hBuffer:BUFFER-FIELD(iTmp).
            IF hBufField:EXTENT = 0
            THEN DO:
                IF hBufField:DATA-TYPE = "CHARACTER"
                THEN PUT STREAM sOut UNFORMATTED '"' hBufField:BUFFER-VALUE '"' {&Delim}.
                ELSE PUT STREAM sOut UNFORMATTED hBufField:BUFFER-VALUE {&Delim}.
            END.
            ELSE DO iTmp2 = 1 TO hBufField:EXTENT: /* it is an extent field so we walk through the extents */
                IF hBufField:DATA-TYPE = "CHARACTER"
                THEN PUT STREAM sOut UNFORMATTED '"' hBufField:BUFFER-VALUE(iTmp2) '"' {&Delim}.
                ELSE PUT STREAM sOut UNFORMATTED hBufField:BUFFER-VALUE(iTmp2) {&Delim}.
            END.
        END.
        PUT STREAM sOut SKIP.
        
        hQuery:GET-NEXT().
    END.
 
    /* cleanup and close */
    hQuery:QUERY-CLOSE().
    DELETE OBJECT hBuffer.
    DELETE OBJECT hQuery.
    OUTPUT STREAM sOut CLOSE.
 
END.
                                              
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:

Select allOpen in new window

 

by: colonytirePosted on 2008-07-28 at 08:51:05ID: 22104267

I am using the second example provided by dlauzon and it works nicely after a few path and name adjustments on progress v10 on a Linux box. It seems that in our progress database we have a few array columns and they do not get exported.  Is this normal, or does something need to be added to handle them?

Thank you for any input.

 

by: progressorPosted on 2008-07-29 at 09:35:56ID: 22113169

the export statement also exports extents variables. (array).
What is the data type of these extents,? Are they perhaps recid or rowid?

Casper

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...