Solved

Send email based on access

Posted on 2014-09-29
32
308 Views
Last Modified: 2014-11-20
Send email based on access  query.

I have an access query like below. I want to send email to 2-3 email address with related record from the query.
In short if the paymentsent is null for more 24 hours an email should be sent to manager. if paymentsent is null for 48 hours an email should go to manager and AGM. But this timing should not count holidays

Sno   orderno       orderdate          dateentered     paymentsent
1         123                12-9-2014        15-9-2014          15-9-2014
2         124                16-9-2014        18-9-2014          19-9-2014
3         125                17-9-2014        19-9-2014          21-9-2014
I managed to get the difference between the date enetered and today if it is more thah 12 hours an email should go to manager.  may be you have better idea.
SELECT TB.orderEntryDate, Now()-[orderEntryDate] AS TEST, TB.Payment, TB.order_no
FROM TB
WHERE (((TB.PIEntryDate) Is Not Null) AND ((Now()-[orderEntryDate])>=1));

Open in new window

0
Comment
Question by:-MAS
  • 10
  • 10
  • 7
  • +3
32 Comments
 
LVL 84

Accepted Solution

by:
Scott McDaniel (Microsoft Access MVP - EE MVE ) earned 500 total points
ID: 40350012
When would this check be done? At some point, you have to have an "event" that triggers your code. You could use a Form Timer, or the Open event of a form, or a button click.

Regardless, you could determine the date differences using several methods. I'd suggest using the DateAdd function instead of just subtracting, so something like:

SELECT TB.orderEntryDate, TB.order_no
FROM TB
WHERE (((TB.PIEntryDate) Is Not Null) AND (DateAdd("h", 12, OrderEntryDate) > Now));

This would tell you all items where the OrderEnteryDate is more than 12 hours old, so you could then fire off an email.

To do that, you can use SendObject:

DoCmd.SendObject acSendNoObject, etc etc

You didn't mention how the emails are stored, or how they're related to the data you're referencing in this question. If you could tell more about how those are stored, we could perhaps help you with pulling that data.
0
 
LVL 84
ID: 40350019
BTW: Here's a Microsoft article that shows how to determine if a Date falls on a weekend or holiday. Basically, you create a table that stores the dates for your Holidays, and then use that table to determine if your dates fall in one of those buckets.
0
 
LVL 24

Author Comment

by:-MAS
ID: 40351518
I think it is better trigger every 1 hour to check any order exceeded 24 hours or no (but excluding holidays)
And another trigger every 1 or 2 hours to check any order exceeded 48 hours to send email to Manager+AGM
Please post the URL of Microsoft article.
0
 
LVL 84
ID: 40351810
Here's the article. It shows how to count the Working Days between two dates:

http://msdn.microsoft.com/en-us/library/dd327646(v=office.12).aspx
0
 
LVL 24

Author Comment

by:-MAS
ID: 40351849
-->You didn't mention how the emails are stored, or how they're related to the data you're referencing in this question. If you could tell more about how those are stored, we could perhaps help you with pulling that data.

An email should go to the manager saying that order# xxx is due

How to send email based on query?
0
 
LVL 84
ID: 40351922
You open the query in a Recordset, then loop through the records and send the email. For example:

Dim rst AS DAO.Recordset
SEt rst = Currentdb.OpenRecordset("SELECT * FROM YourQuery")
Dim sSubject As String
Dim sBody as String

Do Until rst.EOF
  sSubject = "Order " & rst("OrderNumber") & " is due"  
  sBody = "Order & " rst("OrderNumber") & " for the amount of " & rst("Amount") & " is due"
  DoCmd.SendObject acSendNoObject, , , rst("Email"), , , sSubject, sBody
  rst.MoveNext
Loop

Assuming all the data you need for that email is included in the query, the above would work. You'd use the various elements of the recordset to fill the items for the Email, and then issue SEndObject to send out the email. This sends out a standard email, with no formatting or attachments. If you need that sort of functionality, you could use Outlook Automation. The article below shows how to do each type:

http://msdn.microsoft.com/en-us/library/office/ff197046(v=office.15).aspx

Also, this EE article:

http://www.experts-exchange.com/Software/Office_Productivity/Office_Suites/MS_Office/A_4316-Automate-Outlook-in-VBA-with-the-OutlookCreateItem-Class.html
0
 
LVL 24

Author Comment

by:-MAS
ID: 40352020
Getting this error
Untitled.png
0
 
LVL 10

Expert Comment

by:LukeChung-FMS
ID: 40352023
You should also have a date field that that is updated with the current time (Now) when the email is sent. Your query should select the records where that's null so you don't send emails for the same item over and over again.

This may be overkill, but we offer a commercial Microsoft Access email automation program Total Access Emailer that will take care of this for you without any programming. It'll update a date field when an email is sent. There's also a way to set it up so it will run continuously. It uses SMTP rather than MAPI to avoid the security issues associated with automating emails via Outlook. Free trial available.

Hope this helps.
0
 
LVL 84
ID: 40352305
There's a code error - the suggestion I provided was "air code", and you'd be expected to fix minor issues like this. You've been at this long enough to recognize things like that, I'd assume.

sBody = "Order & " rst("OrderNumber") & " for the amount of " & rst("Amount") & " is due"

Should read

sBody = "Order " & rst("OrderNumber") & " for the amount of " & rst("Amount") & " is due"

In the future, please take the time to try and resolve these minor issues yourself. We don't mind helping, but we're not here to be code monkeys ...
0
 
LVL 24

Author Comment

by:-MAS
ID: 40352968
Many thanks
Now set this macro to run 10AM everyday and  excluding the weekends when checking this 24 hours and 48 hours

 Need to switch off this security alert as well.
screenshot
That's it
0
 
LVL 10

Expert Comment

by:Gozreh
ID: 40358084
0
 
LVL 24

Author Comment

by:-MAS
ID: 40358184
I switched off macro nofication in outlook. still it is shwoing
0
 
LVL 10

Expert Comment

by:Gozreh
ID: 40358190
Did you set by the Programmatic Access settings in the Outlook Trust Center to Never warn me about suspicious activity (not recommended) ?
0
 
LVL 24

Author Comment

by:-MAS
ID: 40358698
Yes I set that still it pops up.
BTW I have a combination of these outlook 2010 and access2007
0
 
LVL 31

Expert Comment

by:Helen_Feddema
ID: 40359370
There are many ways to send data from Access in an email.  You could make a filtered report, save the report as a PDF, and email it as an attachment:

Public Sub SendInterventionEmails()
'Created by Helen Feddema 10-Jan-2010
'Last modified by Helen Feddema 10-Jan-2010

On Error GoTo ErrorHandler

   Dim appOutlook As New Outlook.Application
   Dim itm As Outlook.MailItem
   Dim rstIntervention As DAO.Recordset
   Dim lngCount As Long
   Dim lngID As Long
   Dim rpt As Access.Report
   Dim strFileName As String
   Dim strPrompt As String
   Dim strQuery As String
   Dim strRecordSource As String
   Dim strReport As String
   Dim strSQL As String
   Dim strTitle As String
   Dim strCurrentPath As String
   Dim strFileNameAndPath As String
   Dim strEmailSource As String
   
   strEmailSource = "qryInterventionEmail"
   strRecordSource = "qryMissingAssignments"
   strQuery = "qryMissingAssignmentsSingleStudent"
   Set dbs = CurrentDb
   Set rstIntervention = dbs.OpenRecordset(strEmailSource)
   strCurrentPath = Application.CurrentProject.Path & "\"
   
   'Use path selected with SelectFolder procedure
   'strCurrentPath = SelectFolder()

   With rstIntervention
      Do While Not .EOF
         lngID = ![StID]
         Debug.Print "Processing Student ID " & lngID
         strFileName = "Intervention Report for " & ![StFirst] _
            & " " & ![StLast] & ".pdf"
         strFileNameAndPath = strCurrentPath & strFileName
         
         'Create filtered query
         strSQL = "SELECT * FROM " & strRecordSource & " WHERE " _
            & "[StID] = " & Chr(39) & lngID & Chr(39) & ";"
         Debug.Print "SQL for " & strQuery & ": " & strSQL
         lngCount = CreateAndTestQuery(strQuery, strSQL)
         Debug.Print "No. of items found: " & lngCount
         If lngCount = 0 Then
            GoTo NextStudent
         End If
      
         'Open report with filtered query record source
         strReport = "rptMissingAssignmentsNew"
         DoCmd.OpenReport ReportName:=strReport, _
            View:=acViewPreview, _
            windowmode:=acWindowNormal
         Set rpt = Reports(strReport)
         DoCmd.OutputTo objecttype:=acOutputReport, _
            objectname:=strReport, _
            outputformat:=acFormatPDF, _
            outputfile:=strFileNameAndPath
         
         'Create email
         Set itm = appOutlook.CreateItem(olMailItem)
         itm.Subject = "MISSING WORK"
         itm.Body = "The attached file lists your missing assignments"
         itm.To = ![Email]
         itm.Attachments.Add Source:=strFileNameAndPath, _
            Type:=olByValue
         
         'For editing before sending
         itm.Display
         
         'For sending automatically
         'itm.Send
         DoCmd.Close objecttype:=acReport, _
            objectname:=strReport, _
            Save:=acSaveNo

NextStudent:
         .MoveNext
      Loop
   End With
   
ErrorHandlerExit:
   Exit Sub

ErrorHandler:
   MsgBox "Error No: " & Err.Number _
      & " in SendInterventionEmails procedure; " _
      & "Description: " & Err.Description
   Resume ErrorHandlerExit

End Sub

Public Function CreateAndTestQuery(strTestQuery As String, _
   strTestSQL As String) As Long
'Created by Helen Feddema 28-Jul-2002
'Last modified by Helen Feddema 10-Jan-2010

On Error Resume Next
   
   'Delete old query
   Set dbs = CurrentDb
   dbs.QueryDefs.Delete strTestQuery

On Error GoTo ErrorHandler
   
   'Create new query
   Set qdf = dbs.CreateQueryDef(strTestQuery, strTestSQL)
   
   'Test whether there are any records
   Set rst = dbs.OpenRecordset(strTestQuery)
   With rst
      .MoveFirst
      .MoveLast
      CreateAndTestQuery = .RecordCount
   End With
   
ErrorHandlerExit:
   Exit Function

ErrorHandler:
   If Err.Number = 3021 Then
      CreateAndTestQuery = 0
      Resume ErrorHandlerExit
   Else
   MsgBox "Error No: " & Err.Number _
      & " in CreateAndTestQuery procedure; " _
      & "Description: " & Err.Description
   End If
   
End Function

Open in new window


Or you could put the data into the body of an email:

Public Sub CreateEmails()
'Created by Helen Feddema 31-Jan-2010
'Last modified by Helen Feddema 7-Feb-2010

On Error GoTo ErrorHandler

   Dim appOutlook As New Outlook.Application
   Dim dtePickup As Date
   Dim dteSold As Date
   Dim msg As Outlook.MailItem
   Dim rstAll As DAO.Recordset
   Dim rstSingle As DAO.Recordset
   Dim strBody As String
   Dim strCompany As String
   Dim strEMail As String
   Dim strFCFNumber As String
   Dim strGrade1 As String
   Dim strGrade2 As String
   Dim strHeader As String
   Dim strHTMLBody As String
   Dim strLine1 As String
   Dim strLine2 As String
   Dim strNotes As String
   Dim strQueryAll As String
   Dim strQuerySingle As String
   Dim strSignature As String
   Dim strSubject As String
   
   Set dbs = CurrentDb
   strQueryAll = "qrySendEmails"
   Set rstAll = dbs.OpenRecordset(strQueryAll)
   strQuerySingle = "qryTempEmail"
   strSignature = "</table><br><br><font face='Book Antiqua', size=5>" _
      & "<align='left'><u>John Doe</u></font><br>" _
      & "<font face='Arial', size=3><br>" _
      & "VP of Sales and Marketing<br>" _
      & "JD Inc.<br>" _
      & "Ph: 555-112-9601<br>" _
      & "Fx: 555-112-9422<br>"
   Debug.Print "Signature: " & strSignature
   
   Do While Not rstAll.EOF
      'Create filtered recordset for this customer
      lngSupplierID = Nz(rstAll![CustomerID])
      
      If lngSupplierID <> 0 Then
         strSQL = "SELECT * FROM " & strQueryAll & " WHERE " _
            & "[CustomerID] = " & lngSupplierID & ";"
      End If
   
      Debug.Print "SQL for " & strQuerySingle & ": " & strSQL
      lngCount = CreateAndTestQuery(strQuerySingle, strSQL)
      Debug.Print "No. of items found: " & lngCount
      If lngCount = 0 Then
         strPrompt = "No records found; canceling"
         strTitle = "Canceling"
         MsgBox strPrompt, vbOKOnly + vbCritical, strTitle
         GoTo ErrorHandlerExit
      Else
         'Create starter HTML text for this customer
         strHTMLBody = ""
         strHeader = "<p><img border='0' src='Image.jpg' " _
	    	& "width='559' height='120'></p> & "<font face='Arial', size=3>" _
            & "Please schedule the following: <br><br>" _
            & "<table width='791' border='1'>" _
            & "   <tr>" _
            & "      <td width='283'height='26' nowrap valign='bottom'" _
            & "align='left'><font face='Arial', size=3><strong>Grade</strong></font></td>" _
            & "      <td width='127' height='26'nowrap valign='bottom'" _
            & "align='left'><font face='Arial', size=3><strong>FCF Pickup #</strong></font>" _
            & "      <td width='144'height='26' nowrap valign='bottom'" _
            & "align='left'><font face='Arial', size=3><strong>Pickup Date</strong></font></td>" _
            & "      <td width='237'height='26' nowrap valign='bottom'" _
            & "align='left'><font face='Arial', size=3><strong>Notes</strong></font></td>" _
            & "   </tr>"

         Set rstSingle = dbs.OpenRecordset(strQuerySingle)
         strEMail = Nz(rstSingle![EmailAddress])
         strCompany = Nz(rstSingle![strCompany])
         strSubject = "Loads for " & strCompany
         
         'Create email for this customer
         Set msg = appOutlook.CreateItem(olMailItem)
         msg.To = strEMail
         msg.Subject = strSubject
         msg.BodyFormat = olFormatHTML
         
         'Process loads per customer
         Debug.Print "Processing load(s) for " & strCompany
         strBody = ""
         
         Do While Not rstSingle.EOF
            strLine1 = ""
            strLine2 = ""
            strGrade1 = ""
            strGrade2 = ""
            strSlipNo = Nz(rstSingle![SlipNo])
            dteSold = Nz(rstSingle![DateSold])
            dtePickup = Nz(rstSingle![ScheduledPickup])
            strFCFNumber = Nz(rstSingle![FCFNumber])
            strGrade1 = Nz(rstSingle![Grade1])
            Debug.Print "Grade 1: " & strGrade1
            strGrade2 = Nz(rstSingle![Grade2])
            Debug.Print "Grade 2: " & strGrade2
            strNotes = Nz(rstSingle![Notes])
            
            'Create line of body text
            strLine1 = "<font face='Arial', size=3" _
               & "   <tr>" _
               & "      <td width='283'valign='bottom' align='left'>" & strGrade1 & "</td>" _
               & "      <td width='127' valign='bottom' align='left'>" & strFCFNumber _
               & "      <td width='144'valign='bottom' align='left'>" _
               & Format(dtePickup, "m/d/yyyy") & "</td>" _
               & "      <td width='237'valign='bottom' align='left'>" & strNotes & "</td>" _
               & "   </tr></font>"
            Debug.Print "Line 1: " & strLine1
            
            If strGrade2 <> "" Then
               strLine2 = "<font face='Arial', size=3>" _
                  & "   <tr>" _
                  & "      <td width='283'valign='bottom' align='left'>" & strGrade2 & "</td>" _
                  & "      <td width='127' valign='bottom' align='left'>" & strFJDNumber _
                  & "      <td width='144'valign='bottom' align='left'>" _
                  & Format(dtePickup, "m/d/yyyy") & "</td>" _
                  & "      <td width='237'valign='bottom' align='left'>" _
                  & strNotes & "</font></td>" _
                  & "   </tr>"
            End If
            Debug.Print "Line 2: " & strLine2
         
            strHTMLBody = strHTMLBody & strLine1 & strLine2
            rstSingle.MoveNext
         Loop
         
         strHTMLBody = strHeader & strHTMLBody & strSignature
         Debug.Print "Message HTML body: " & strHTMLBody
         
         msg.HTMLBody = strHTMLBody
         msg.Display
         
      End If
      rstAll.MoveNext
   Loop
   
ErrorHandlerExit:
   Exit Sub

ErrorHandler:
   MsgBox "Error No: " & Err.Number _
      & " in CreateEmails procedure; " _
      & "Description: " & Err.Description
   Resume ErrorHandlerExit

End Sub

Open in new window


For avoiding the annoying Object Model Guardian pop-up (which seems to have come back to life after being eliminated in one of the SPs for Office 2007), you can  use Dmitry Streblechenko's Redemption Library:

http://www.dimastr.com/
0
Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

 
LVL 31

Expert Comment

by:Helen_Feddema
ID: 40359372
I thought the Object Model Guardian was gone for good -- I haven't seen it for years -- but a few days ago one of my clients started getting it, and I had to restore old Redemption code, and now you report it.  See my Access Archon article on this topic:

http://www.helenfeddema.com/Files/accarch113.zip
0
 
LVL 24

Author Comment

by:-MAS
ID: 40370316
I managed to exclude the Saturdays and Sundays. using the below code
SELECT TB.orderDate, DateAdd("h",24,[TB].[orderDate])+(DateDiff("w",[OrderEntryDate],Now(),1)+DateDiff("w",[OrderEntryDate],Now(),7)) AS DueOrders, TB.OrderDate, FROM TB
WHERE (((TB.OrderEntryDate) Is Not Null) And ((DateAdd("h",24,TB.OrderEntryDate)+(DateDiff("w",[OrderEntryDate],Now(),6)+DateDiff("w",[OrderEntryDate],Now(),7)))<Now()));

Open in new window


Not sure it is the right way but I tested and found useful for my purpose

Now only issue is how to fix the outlook popup for sending emails.
Your help is appreciated to send email without popup or clicking allow
0
 
LVL 31

Expert Comment

by:Helen_Feddema
ID: 40370458
See my comments above about using the Redemption Library to avoid the annoying pop-up.  Once you have installed this library, here is some sample Access VBA code for using its objects:

   'Redemption objects and corresponding Outlook objects must
   'be declared as Object type
   Dim omsg As Object
   Dim msg As Object
   Dim otsk As Object
   Dim tsk As Object
   
      'Create new mail message and send it now
      Call OpenOutlook
      Set omsg = gappOutlook.CreateItem(olMailItem)
      Set msg = New Redemption.SafeMailItem
      msg.Item = omsg
      
      With msg
         .To = strToEMail
         .Subject = strMessageSubject
         .Body = strBody
         .Send
      End With
      
      'Note:  Messages created with Redemption Library objects
      'are created in the Drafts folder instead of the Outbox,
      'but they will be sent as if from the Outbox.
   Else
      'Create task item for sending the mail message later
      Set otsk = gappOutlook.CreateItem(olTaskItem)
      Set tsk = New Redemption.SafeTaskItem
      strTaskMessage = "When the task reminder fires, an email message will " _
         & "be created and placed in the Drafts folder to be sent"
      With tsk
         .Item = otsk
         .Display
         .Subject = strTaskSubject
         .DueDate = dteReminder
         .StartDate = dteReminder
         .Categories = "Reminder"
         .Body = strTaskMessage
         
         'Store info for mail message in unused Task fields
         .BillingInformation = strToEMail
         .CardData = strMessageSubject
         .Mileage = strBody
         
         'Set task reminder for date when message should be sent
         .ReminderSet = True
         .ReminderTime = dteReminder
         .Close (olSave)
      End With
   End If

      Set onitm = fldClientsStoreID.Items(1)
	'There is no SafeNoteItem, but SafeMailItem can be used for note items
      Set nitm = New Redemption.SafeMailItem
      nitm.Item = onitm

      Set jitm = New Redemption.SafeJournalItem
      jitm.Item = ojitm

  

Open in new window

0
 
LVL 24

Author Comment

by:-MAS
ID: 40370663
I am already using this command. Is it possible to do something with this?
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("SELECT * FROM Emailalertorder")
Dim sSubject As String
Do Until rst.EOF
  sSubject = rst("Order_no") & " Shipment delay"
  sBody = "Shipment of PI no. " & rst("Order_no") & ", Delayed, other details below." & vbNewLine & "Division: " & rst("division")
  DoCmd.SendObject acSendNoObject, , , "mohdasif@nsportq8.com", , , sSubject, sBody, False
  rst.MoveNext
Loop

Open in new window



Any update
0
 
LVL 31

Expert Comment

by:Helen_Feddema
ID: 40396866
I don't think you can use Redemption objects with the SendObject command.  VBA code is a lot more flexible, in any case.
0
 
LVL 84
ID: 40396883
I use vbMAPI from www.everythingaccess.com to get around those security prompts. It's very portable (no additional libraries to install - everything is included in your Access database), and is very easy to use.

Still, as Helen indicates with Redemption, it won't work with SendObject. All that really does is interact with the default email client on the machine, and gives you very basic email capabilities. If you need to do anything other than send a simple, plain-text email, you'll have to use some form of automation.
0
 
LVL 24

Author Comment

by:-MAS
ID: 40396900
Then how to get rid of this?
0
 
LVL 31

Expert Comment

by:Helen_Feddema
ID: 40398090
Replace your code with something like the sample Redemption code I posted earlier (after getting Redemption -- you may find the free version all you need).
0
 
LVL 84
ID: 40398134
Just realize that the "free" version of Redemption is a developer's tool, and is not intended to be distributed, either internally or commercially. It also displays a prompt. See this page: http://dimastr.com/redemption/download.htm which states:

Note that the definition of commercial software also includes internal applications whether they are available to the public or not.
I take this to mean that you should only install Redemption on the Developer's machine. If you intend on others using this, as would be indicated by your reference to a "manager" and such, then you'd need to purchase the distribution license.

vbMAPI is quite a bit less expensive, easier to deploy, and is every inch as robust as Redemption ... but it's your call. Either way, you'll have to use something to get around the security prompts.
0
 
LVL 31

Expert Comment

by:Helen_Feddema
ID: 40399373
I would suggest trying vbMAPI, and see if it works for you.  I have the paid version of Redemption, which is rather expensive, but definitely worthwhile if you develop applications for clients.  It wasn't needed for years, but now that the obnoxious Object Model Guardian has apparently been revived, it (or some other app that serves the same purpose) is once more needed.
0
 
LVL 84
ID: 40399395
but now that the obnoxious Object Model Guardian has apparently been revived,
Agreed. The security in place with Outlook makes working with it quite difficult, although in some ways I can kinda see why the did what they did.

I too used Redemption, and had the paid version up until a few versions back. Once I looked into vbMAPI, however, I switched entirely over to that.
0
 
LVL 31

Expert Comment

by:Helen_Feddema
ID: 40399973
I haven't updated my Redemption since 2007.  It still works fine.
0
 
LVL 84
ID: 40400056
I ended up with vbMAPI due to a restriction at one of my clients that would not allow any 3rd party components to be installed on their system - everything had to be selfcontained, and vbMAPI is entirely contained within the Access application.
0
 
LVL 24

Author Comment

by:-MAS
ID: 40401062
Now only thing pending is the outlook popup. i.e. the image in postID#40352968
How to stop this?
0
 
LVL 84
ID: 40401762
As mentioned earlier you must use something like Redemption or vbMAPI to do this.
0
 
LVL 45

Expert Comment

by:Martin Liss
ID: 40454644
This question has been classified as abandoned and is closed as part of the Cleanup Program. See the recommendation for more details.
0

Featured Post

What Should I Do With This Threat Intelligence?

Are you wondering if you actually need threat intelligence? The answer is yes. We explain the basics for creating useful threat intelligence.

Join & Write a Comment

Experts-Exchange is a great place to come for help with solutions for your database issues, and many problems are resolved within minutes of being posted.  Others take a little more time and effort and often providing a sample database is very helpf…
A simple tool to export all objects of two Access files as text and compare it with Meld, a free diff tool.
Familiarize people with the process of retrieving data from SQL Server using an Access pass-thru query. Microsoft Access is a very powerful client/server development tool. One of the ways that you can retrieve data from a SQL Server is by using a pa…
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…

760 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now