Click here to Skip to main content
Email Password   helpLost your password?
AccountPlus.JPG

Terms & Conditions

AccountPlus is an open source software for account/expense sharing. Users of AccountPlus can use the application in their own way. If at any stage, the user wants to make some modification/enhancement in the application, he/she is free to do the same. Any suggestions/queries are most welcome from the author’s side. For any queries, please write a mail with subject line ‘AccountPlus’.

Table of Contents

1. AccountPlus Overview
1.1 Introduction
1.2 User Roles and their Rights
2. AccountPlus Design Overview
3. AccountPlus Block Diagram
4. Design & Source Code Details
5. AccountPlus Installation
5.1 AccountPlus Pre-Requisites
5.2 Installation
6. How to Change AccountPlus Database
7. Working with AccountPlus
1. Login
2. User Management
2.1 Creating new user
2.2 Searching any user
2.3 Editing user information
2.4 De activating user
2.5 Activating user
3. Item Management
3.1 Creating new Item
3.2 Searching an item
3.3 Editing item details
4. Expense Management
4.1 Adding new expense
4.2 Editing expense details
4.3 Deleting expense
5. Reports
Reporting is the most exciting part of AccountPlus. AccountPlus has mainly three reports:
5.1 Expense Report
5.2 Monthly Report
5.3 Analytic Report
6. Finalizing expense
How to finalize the expense?
7. Edit user profile
How to change password?
8. Database information
9. System diagnostics
10. Version information
11. Report a bug or contact author

1.    AccountPlus Overview

1.1  Introduction

Technical Details

AccountPlus is developed using Microsoft.NET technology. It uses C# as a code language. AccountPlus is specially designed and shared for the beginners and intermediate level programmers to understand, design and implement the entire SDLC (Software Development Life Cycle). Also it may be helpful to understand

Functional Overview

AccountPlus is an application which can be used for shared account/expense management with proper reporting and general analytics.

In order to justify the significance of AccountPlus, we should compare the traditional account management system (paper based account management) with the features of AccountPlus.

Paper Based Account Management: Many times, it happens that multiple people share their daily expenditures. To maintain all these accounts, usually we use paper to keep track of all the individual expenses.

Drawbacks of Paper Based Account Management System

Like this, there are many disadvantages of paper based account management. But with the help of AccountPlus, at every instant we are capable of analyzing the expenses and doing the proper kind of analysis to have a better control on expenditure with full security.

1.2  User Roles and their Rights

AccountPlus has two user roles,

  1. Admin : Admin is the super user for the application who is mainly responsible for
    1. Creating/ modifying the user details to access the system.
    2. Finalizing the expenses.
  2. General User: General user is the user who accesses the system very frequently. General users are responsible for,
    1. Add/ Update/ Delete the expenses. (User can’t edit or delete expense of other users)
    2. Generating and analyzing the expenses.

2.    AccountPlus Design Overview

AccountPlus application is mainly divided into three layers

  1. User Interface Layer

    User interface layer of account plus contains all the forms and base class to provide style to the user interface. User interface of the application interacts with Business Layer and very rarely with Data Access Layer to fulfill the request or business action made by the user. Also this layer interacts with Messaging component of the AccountPlus very frequently for displaying the messages to the user interface.

  2. Business Layer

    Business Layer is the core part of the application. This component contains all the business logics being used by the application. This component interacts very frequently with the Data Access Layer for writing and reading the data to or from the AccountPlus database.

  3. Data Access Layer

    Data Access Layer is one among the most important components of the application. This is an independent component. This layer enables the application to interact with the AccountPlus data base in an efficient manner. Data Access Layer is independent of database i.e. it may support all kind of databases e.g. MS Access, Excel, SQL Server, MySql, Oracle and etc. This component may be as it is used for any other application also.

Note: Present data access layer component does not support explicit transaction management. It’s under progress.

Also it has three more small components for Messaging, Configuration and Formatting. Following are the details of these components

Messaging

This component is used to make application scalable in terms of achieving Globalization and Localization. Current version mainly uses this component as a message repository. This helps the application in managing the various application from a single place. This holds application into a resource file.

Configuration

This component is used to for reading the application level configuration i.e. the configuration details stored into App.config file.

Formatting

This component is responsible for formatting various data types being used by the application.

3.    AccountPlus Block Diagram

Following is the block representation of various components of AccountPlus

4.    Design & Source Code Details

As it’s a complete application hence it’s little difficult to explain each and every component, so I would be mainly explaining the re usable components.

4.1 How to View/ Debug the source code?

Follow the steps below to view / debug AccountPlus source code

<add name="MSAccessCon" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=X:\ AccountPlusDatabase\AccountPlus.mdb;Jet
OLEDB:Database Password=admin;" providerName="MSACCESS" />

Note:

http://dev.mysql.com/downloads/connector/net/6.1.html

4.2   Exception Handling

Exception handling is one of the important aspects while developing any software/ application. AccountPlus displays the exception occurred to the user in a screen also it logs the exception to the log file with the help of log4Net.

Following is the screen which displays any unhandled exception encountered by the application. This screen is brought from one place only i.e. one place exception handling.

Above exception handling logic is implemented to the Program class of AccountPlus.UserInterface. Program is the class which is generated automatically by the visual studio. Program class contains the Main() method which is the entry point to the application.

In order to implement above kind of exception handling follow the steps

  1. Add ThreadExceptionEventHandler to monitor all the thread exception occurred into the application
    Application.ThreadException
    += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
  2. Implement Application_ThreadException method which will include the logic to log the error and bring the error screen. (Refer actual implementation from the Program.cs class)

4.3 Logging exceptions with the help of log4net

AccountPlus uses Open Source library log4Net for logging the exceptions or errors to the log file. Logger.cs class of AccountPlus.BusinessLogic is implements necessary methods to log the informations to the log file.

Follow the steps below to log the exceptions

  1. Add a new section, log4net to the configSections of app.config file
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,
    log4net" />
  2. Add the configuration details for log4net
    <log4net debug="true">
        <appender name="RollingLogFileAppender" 
            type="log4net.Appender.RollingFileAppender">
          <appendToFile value="true" />
          <rollingStyle value="Size" />
          <maxSizeRollBackups value="10" />
          <maximumFileSize value="2MB" />
          <staticLogFileName value="true" />
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern 
                value="%nDate:%d System User:%W%nClass Name:%C Method Name:
                %l Line Number:%L%nDev Message:%m%n%n" />
          </layout>
        </appender>
        <root>
          <level value="INFO" />
          <appender-ref ref="RollingLogFileAppender" />
        </root>
      </log4net>
  3. By implementing the above points (a & b) we would be now able to implement Logging with the help of log4net library.

Note: For detailed implementation details please refer Logger.cs class of AccountPlus.BusinessLogic component.

4.4   Globalization & Localization

In fact AccountPlus does not implement the Globalization and Localization concept truly sense, but Globalization/ Localization concept is implemented into the AccountPlus.Messaging component of the application. This component includes a resource file MessageResource.resx, this file contains all the messages which are displayed to the user interface. Managing messages like this gives flexibility to do changes into text from one place without altering user interface or business logic. Currently any culture is not set for the application, but in future very easily we can include culture specific messages.

Please refer the points below to know how messages are stored or retrieved to or from the resource file

  1. Messages are stored into resource file with a unique key value for each message.
  2. MessageManager class of the messaging component includes all the logic to read the messages from resource file. GetMessage, DisplayMessage and its various overloads are responsible for fething and formatting the messages.
    public static string GetMessage(string messageNo, bool includeNo)
            {
                string message = string.Empty;
                message = ResourceManager.GetString("MSG" + messageNo, Culture);
                message = includeNo ? "[" + messageNo + "] " + message : message;
                return message;
            }

Note: For detailed implementation details please refer MessageManager.cs class of AccountPlus.Messaging component.

4.5   Data Security

AccountPlus stores all credentials into database by encrypting the data into certain format. DataSecurity class of the AccountPlus.BusinessLogic component is responsible for encryption/ decryption of the data.

DataSecurity class exposes two public methods Encrypt and Decrypt to encrypt or decrypt the strings

static byte[] bytes = ASCIIEncoding.ASCII.GetBytes("AccountPlus");
        /// <summary>
        /// Encrypt normal string.
        /// </summary>
        /// <param name="originalString">String to be encrypted.</param>
        /// <returns>Encrypted string</returns>
public string Encrypt(string originalString)
        {
            if (String.IsNullOrEmpty(originalString))           
                return string.Empty;
           
            DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
            MemoryStream memoryStream = new MemoryStream();
            CryptoStream cryptoStream = new CryptoStream(memoryStream,
                cryptoProvider.CreateEncryptor(bytes, bytes), CryptoStreamMode.Write);
            StreamWriter writer = new StreamWriter(cryptoStream);
            writer.Write(originalString);
            writer.Flush();
            cryptoStream.FlushFinalBlock();
            writer.Flush();
            return Convert.ToBase64String(memoryStream.GetBuffer(), 0,
                (int)memoryStream.Length);
        }
 
        /// <summary>
        /// Decrypt encrypted string to the normal string
        /// </summary>
        /// <param name="cryptedString">Decrypted string</param>
        /// <returns>Normal (Decrypted) string</returns>
        public string Decrypt(string cryptedString)
        {
            if (String.IsNullOrEmpty(cryptedString))
            {
                throw new ArgumentNullException
                   ("The string which needs to be decrypted can not be null.");
            }
            DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
            MemoryStream memoryStream = new MemoryStream
                    (Convert.FromBase64String(cryptedString));
            CryptoStream cryptoStream = new CryptoStream(memoryStream,
                cryptoProvider.CreateDecryptor(bytes, bytes), CryptoStreamMode.Read);
            StreamReader reader = new StreamReader(cryptoStream);
            return reader.ReadToEnd();
        }

4.6   XML Manipulation

AccountPlus stores some of the user preferences to XML file i.e. Preferences.xml which use to be present into the root directory of the application. Preferences class of the AccountPlus.BusinessLogic component is responsible for reading or writing the user preferences data. This class (Preferences.cs) internally uses XmlHelper class which takes care of getting or setting the data into Preferences.xml file.

Following is the schema for the schema for the Preferences.xml

XmlHelper class mainly exposes two methods to get or set the data for any specific user preference.

public class XMLHelper
{
    private XmlDocument xmlDocument = null;
    public XMLHelper()
    {
        xmlDocument = GetXMLDoc();
    }

    /// <summary>
    /// Reads the value of passed node name
    /// </summary>
    /// <param name="itemName">Node name for which vale needs to be read</param>
    /// <returns>Value of the node</returns>
    public string GetValue(string itemName)
    {
        string value = string.Empty;
        XmlNodeList nodes = xmlDocument.DocumentElement.ChildNodes;

        foreach (XmlNode node in nodes)
        {
            if (node.Attributes["name"].Value.Trim().ToLower() == 
                itemName.Trim().ToLower())
            {
                value = node.Attributes["value"].Value.Trim();
                break;
            }
        }

        return value;
    }

    /// <summary>
    /// Saves the value for the passed xml node into Preference.xml file
    /// </summary>
    /// <param name="itemName">XML Node name</param>
    /// <param name="value">value to be saved</param>
    public void SetValue(string itemName, string value)
    {
        XmlNodeList nodes = xmlDocument.DocumentElement.ChildNodes;
        foreach (XmlNode node in nodes)
        {
            if (node.Attributes["name"].Value.Trim().ToLower() ==
                itemName.Trim().ToLower())
            {
                node.Attributes["value"].Value = value.Trim();
                break;
            }
        }
        xmlDocument.Save(FileName);
    }

    /// <summary>
    /// Saves the modifications done into the XML Document.
    /// </summary>
    public void Save()
    {
        xmlDocument.Save(FileName);
        xmlDocument = GetXMLDoc();
    }

    /// <summary>
    /// Loads XML document for reading or writing purpose.
    /// </summary>
    public XmlDocument GetXMLDoc()
    {
        XmlDocument xmlDoc = new XmlDocument();
        try
        {
            xmlDoc.Load(FileName);
        }
        catch (Exception ex)
        {
            throw ex;
        }

        return xmlDoc;
    }
    /// <summary>
    /// Gets the User Preference file name.
    /// </summary>
    private string FileName
    {
        get { return Application.StartupPath + "\\Preferences.xml"; }
    }
}

4.7   Data Access

Data Access Layer i.e. AccountPlus.DataAccess component of the AccountPlus may be most preferred reusable component. Without any modification this component may be used for reading or writing the data to any data base (Tested for MS Access, SQL Server and MySQL). Current version of Data Access Layer does not support transactions, it would be implemented soon.

Following are the various class files contained by Data Access Layer

How multiple databases are supported by AccountPlus Data Access Layer?

Support to multiple database is achieved with the help of various interfaces IDbConnection, IDbCommand, IDataParameter, IDataAdapter and etc exposed by System.Data library of .NET Framework.

We will see implementation of ExecuteScalar method of Data Access Layer to understand how it works

/// <summary>
/// Executes the Sql Command or Stored Procedure and returns result.
/// </summary>
/// <param name="commandText">Sql Command or Stored Procedure name</param>
/// <param name="commandType">Type of command (i.e. Sql Command/ 
///              Stored Procedure name/ Table Direct)</param>
/// <returns>A single value. (First row's first cell value, if more than one
///          row and column is returned.)</returns>

public object ExecuteScalar(string commandText, CommandType commandType)
{
    object objScalar = null;           
    IDbConnection connection = _connectionManager.GetConnection();
    IDbCommand command = _commandBuilder.GetCommand(commandText, connection, commandType);

    try
    {
        objScalar = command.ExecuteScalar();
    }
    catch (Exception ex)
    {
        throw ex;
    }
    finally
    {
        if (connection != null)
        {
            connection.Close();
            connection.Dispose();
        }

        if (command != null)
            command.Dispose();
    }
    return objScalar;
}

Look at the following code line being used in ExecuteScalar method for getting a Database connection

IDbConnection connection =
_connectionManager.GetConnection();

Here we use GetConnection method of the ConnectionManager class to get an open connection to the database.

/// <summary>
/// Establish Connection to the database and Return an open connection.
/// </summary>
/// <returns>Open connection to the database</returns>
internal IDbConnection GetConnection()
{
    IDbConnection connection = null;
    string connectionString = Configuration.ConnectionString;
    switch (Configuration.DBProvider.Trim().ToUpper())
    {
    case Common.SQL_SERVER_DB_PROVIDER:
        connection = new SqlConnection(connectionString);
        break;
    case Common.MY_SQL_DB_PROVIDER:
        connection = new MySqlConnection(connectionString);
        break;
    case Common.ORACLE_DB_PROVIDER:
        connection = new OracleConnection(connectionString);
        break;
    case Common.EXCESS_DB_PROVIDER:
        connection = new OleDbConnection(connectionString);
        break;
    case Common.ODBC_DB_PROVIDER:
        connection = new OdbcConnection(connectionString);
        break;
    case Common.OLE_DB_PROVIDER:
        connection = new OleDbConnection(connectionString);
        break;
    }

    try
    {
        connection.Open();
    }
    catch (Exception err)
    {
        throw err;
    }

    return connection;
}

Explanation

How to execute any Command?

DBHelper is the class which is mostly being instantiated by other components of application for reading or writing the data.

DBHelper class implements following methods with their various overloads to access the database

Following is the example of reading scalar value from the database.

private DBHelper _dbHelper = new DBHelper();

object objTemp =
_dbHelper.ExecuteScalar("SELECT COUNT(*) FROM
User_Info;");

Note: Present data access layer component does not support explicit transaction management. It’s under progress.

5.    AccountPlus Installation

5.1  AccountPlus Pre-Requisites

To run Account Plus, the target machine should have,

5.2  Installation

Note: Do remember to enter appropriate currency in Step 4, i.e. Rs. Or $ or anything so that your expenses are represented into the same currency. By default installer configures MS Access database, however it may be customized for any database.

6.    How to Change AccountPlus Database

AccountPlus may work with any of the database for example MS Access, MySql, SQL Server and Oracle. By default installer configures MS Access database for the application however it may be changed to any database. Downloaded package contains the db scripts for MySQL and SQL Server Database.

Follow the steps below to change the database.

  1. Prepare the MySQL or SQL Server database by running the scripts present into the database directory of the downloaded files.
  2. Go to the installation directory of AccountPlus. (Usually is C:\Program Files\AccountPlus)
  3. Find and open the ‘AccountPlus.UI.exe.config’ file in any suitable editor.
  4. Locate 'connectionStrings' section. There you may get the connection strings for MySQL and SQL Server with the name mySqlCon and sqlServerCon respectively. Modify the connection string attribute with suitable values i.e. Appropriate Database name, User Id, Password, Server and Port etc.
  5. Locate ‘appSettings’ setion in the ‘AccountPlus.UI.exe.config’ file. Modify the value of ‘defaultConnection’ with the name of the connection String modified by you in the previous step.

Note: Make sure that while changing/ adding new connection string you are using correct providerName. E.g.

Database Provider name
MS Access providerName="MSACCESS"
MySQL providerName="MYSQL"
Oracle providerName="ORACLE"
SQL Server providerName="SQLSERVER"
OLEDB providerName="OLEDB"
ODBC providerName="ODBC"

7.    Working with AccountPlus

1. Login

Provide the User name and password and click on ‘Login’ button to login into the application.

If you are selecting ‘Remember me’ then for next time application will automatically populate Username and Password.

Logon Information

Click on info button to know the last log on information.

2. User Management

User management i.e. adding new users and modifying user details right is reserved for the admin user role only.

2.1 Creating new user

Login to the application as an admin user role,

  1. Press ‘ALT+U’ or Go to File-> Add-> User

  2. A new window would appear. Select the desired user role and enter the user details. Click on ‘Add’ button to create user.

2.2 Searching any user

Press ‘ALT+U’ or go to File ->Add->User. Into the window opened enter any of the details and click on search button.

Note: All the fields are not mandatory you may enter any of the details to search.

2.3 Editing user information

‘ALT+U’ or go to File ->Add->User. Select the user from the grid whose information you want to edit. Selection of any row containing user information will make the user details available to the upper area where details may be changed. Click on ‘Update’ button to save the changes.

2.4 De activating user

‘ALT+U’ or go to File ->Add->User. Select the user from the grid want to deactivate. Selection of any row containing user information will make the user details available to the upper area. Uncheck the ‘Active’ check box and click on ‘Update’ button to save the changes.

2.5 Activating user

‘ALT+U’ or go to File ->Add->User. Select the user from the grid want to activate. Check the ‘Active’ check box and click on ‘Update’ button to save the changes.

3. Item Management

Item management i.e. adding new item and modifying item details right is given to all the user roles.

3.1 Creating new Item

  1. Press ‘ALT+I’ or Go to File-> Add-> Item

  2. A new window would appear. Enter the item details. Click on ‘Add’ button to create new item.

3.2 Searching an item

Press ‘ALT+I’ or go to File ->Add->Item. Into the window opened enter any of the details and click on search button.

Note: All the fields are not mandatory you may enter any of the details to search.

3.3 Editing item details

‘ALT+U’ or go to File ->Add->User. Select the user from the grid whose information you want to edit. Selection of any row containing user information will make the user details available to the upper area where details may be changed. Click on ‘Update’ button to save the changes.

4. Expense Management

Only general users can add, update or delete the expenses. Admin can’t enter any expense. Users can edit or delete only their own expenses not other user’s expenses but can view all the users expense.

4.1 Adding new expense

Select the item against which you want to enter the expense. Selection of item will automatically populate the expense description where as user can change the same. Enter other information like amount and date. Click on the ‘Add’ button to save the changes.

Once item is added successfully, newly added expense details would appear into the expense details grid shown right side of the screen.

Note: Expense date can’t be greater than today’s date.

4.2 Editing expense details

Select the particular expense from the grid needs to be edited. Selection of any row containing expense details will make the e details available to the left side of the screen where details may be edited. Click on ‘Update’ button to save the changes.

4.3 Deleting expense

Select the particular expense from the grid needs to be deleted. Selection of any row containing expense details will make the details available to the left side of the screen where details may be edited or deleted. Click on ‘Delete’ button to delete the expense.

5. Reports

Reporting is the most exciting part of AccountPlus. AccountPlus has mainly three reports:

5.1 Expense Report

Press F4 or click on the button present on tool bar to open expense report.

Once item is added successfully, newly added expense details would appear into the expense details grid shown right side of the screen.

Expense Report gives us the information about the

Based on these three pieces of information, AccountPlus calculates “How much each user has paid, and how much each participant is either supposed to pay to others participants or supposed to get from other participants”.

5.2 Monthly Report

Press F5 or click on the button present on tool bar to open monthly report.

Select the Month, Year for which report needs to be generated and click on ‘Generate’ button. Apart from the expense details this report will give the information about some other important things like Finalization Date, Total Expense and Days etc.

5.3 Analytic Report

Press F6 or click on the button present on tool bar to open analytic report.

Select the Month, Year for which report needs to be generated and click on ‘Generate’ button.

Same as Monthly report, Analytic Report also has two views Individual and Monthly.

Whenever we are generating the Analytic Report for a particular Month and Year, the Analytic Engine of AccountPlus checks whether expense data exists for the previous and next month data for the selected month and year. If data exists, Analytic Report will give the trend on a particular item or user about whether the expense has increased or decreased from the previous or next month.

Example

Suppose you have selected Dec, 2007 to generate the analytic report. Now, the Analytic Engine of AccountPlus will check whether the data exists for Nov, 2007 and Jan, 2008. If the data exists, then Analytic Report will compare the expense on each item or expense by users based on the view selected (Individual or Item wise). If data for previous month does not exist then Analytic Report will compare only the selected month and the next month.

6. Finalizing expense

Only admin user role has got the rights to finalize the expenses.

In order to understand the Finalization process, we will take the example of paper based account management system. In paper based account management system, at the end of the month, all the expenses occurred needs to be summed up, to calculate the total expense for the month. Then divide the total expense by number of persons supposed to share the expense. Like this, individual contribution is calculated. Now all the members will either receive an amount by another member or pay the amount to other members based on individual contribution and amount paid by each participant.

Once this process is completed, expense sheet needs to be tear up or to be cross marked.

Finalizing the expense in AccountPlus is the same process where admin makes sure that all the users have cleared their dues i.e. each participant have received or paid their dues. After finalizing the expense, current expense details would not be displayed on the home page but the data will remain in the database for analysis and reporting purposes.

How to finalize the expense?

Login as admin.

Expense report provides information about total expense and the dues for the particular tenor. Pay/Get is very important information in order to clear the dues, this information gives the information among the users about who is supposed to pay and who is supposed to get.

7. Edit user profile

Press ‘Alt+P’ or go to Edit-> Profile to bring the screen where user profile can be edited.

How to change password?

Check the check box ‘Change Password’. Enter old password, password and confirm passwords field s and click on ‘Submit’ button to save the details.

8. Database information

Press ‘Alt+Shift+S’ or go to Tools-> Database to open the database information window.

Note:

9. System diagnostics

Press ‘Alt+Shift+D’ or go to Tools-> Diagnostics to open the diagnostics information window where application logs and trace can be viewed.

10. Version information

Press F2 or go to Help-> About to open the about dialog box.

11. Report a bug or contact author

Press F3 or go to Help-> Contact Admin to open window which helps the user to post their feed back or comments to the author.

You must Sign In to use this message board.
 
 
Per page   
 FirstPrevNext
GeneralStored procedure output parameter
redspiderke
3:06 15 Feb '10  
Hi,

My Insert Stored Procedures always return a bigint value as an identity key for a new record via an output parameter in the stored procedure. How do I obtain the output value using the Dal? Also, how to I get the return value from the procedure?

Thanks
GeneralORA-01036: illegal variable name/number
theRealScarecrow
5:44 3 Jan '10  
Hi Ashish,

Great article. I could use a lot of it for an own application, which didnt has a user management till now.

I wonder if you tested AccountPlus with an Oracle database.
Cause when debuging AccountPlus against an Oracle XE instance, the application comes back with an Ora error: "ORA-01036: illegal variable name/number".
The XE DB is installed local on my workstation. The connection to the database is made perfectly, but when SQL it, the ORA appears. I can't fugure out why.......
Perhaps I din't convert the MySql version well to an Oracle version.

Here is the complete error from the Error form:

ORA-01036: illegal variable name/number

bij AccountPlus.UI.Login.btnLogin_Click(Object sender, EventArgs e) in E:\Projects\DotNET\C#NET\AccountPlus\AccountPlusSource\AccountPlusSource_2008\AccountPlus.UserInterface\Login.cs:regel 82 bij System.Windows.Forms.Control.OnClick(EventArgs e)
bij System.Windows.Forms.Button.OnClick(EventArgs e)
bij System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
bij System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
bij System.Windows.Forms.Control.WndProc(Message& m)
bij System.Windows.Forms.ButtonBase.WndProc(Message& m)
bij System.Windows.Forms.Button.WndProc(Message& m)
bij System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bij System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bij System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)



Grtz,

Remco
AnswerRe: ORA-01036: illegal variable name/number
theRealScarecrow
9:29 17 Jan '10  
Hi Ashish,

Sometimes the solution isnt that difficult and ofcourse I overlooked it Laugh

The solution to this problem is to correctly pass the parameters Consider the following Query:

string sqlCommand = "SELECT * FROM USER_INFO WHERE USER_NAME=:userName AND PWD=:password AND IsActive=1";

As you can see above the parameter in Oracle has a prefix : (colon) and not @ like SQL Server Query

When using parameters in query they must start with colon and when adding them they should be added without colon too
This means that the code in calsses "Users" and "UserAuthentication" must be adjusted when working with an Oracle database.

grtz,

Remco
Generalgood work
Donsw
17:27 29 Oct '09  
Well done. a lot of work and it worth it

cheers,
Donsw
My Recent Article : CDC - Change Data Capture

GeneralDatabase backend
Martin0815
4:36 16 Sep '09  
Hello,

is it possible for you to implement an SQLite database connection, too?

Just in addition to MySQL, SQL Server and MS Access?

I have none of those above, but SQLite wouldn't be a problem, because there is no need to install any software!

Best regards,

Martin
GeneralGL Module
Savun
21:01 15 Sep '09  
General Ledger is the heart accounting system. It'd be better if it is added to AccountPlus.

Anyway, well done.

Cheers,

Savun
GeneralRe: GL Module
Ashish Tripathi
21:20 15 Sep '09  
Hello Savun,
Thanks a lot for monitoring the application very carefully and giving really a valuable suggestion. I will be adding the GL module for sure into the application. If you have any link which can help me in implementation of GL Module please provide me the same.

Thanks again
Ashish

Thanks and Regards.....
Ashish Tripathi
____________________________

GeneralGood work
Doubin
23:51 10 Sep '09  
Open source accounts are hard to find. Posibliy because you cannot half do it.

Many people will able to use this.

Thanks

http://doubin.blogspot.com/

GeneralGood Work
c_paresh
19:20 13 Jul '08  
Hi,
I have downloaded and seen your app and the amount of work that has gone in. I would like to say good work and keep updating it. I have not used it but I have been going thru it and understanding the business logic you have used.

__________________________________________________
An expert is someone who takes a subject you understand and makes it sound confusing.

GeneralAppreciate your work, but one suggestion
Shoki
13:01 10 Jun '08  
Do not create N number of project just for the sake of it. Try to compact the number of project if unwarrented as is in your case. Most of the project just contain couple of classes.

Shoki

GeneralRe: Appreciate your work, but one suggestion
Ashish Tripathi
22:00 10 Jun '08  
Hi Soki,
Thanks a lot for suggestion. I will take care of this. May I know something about you as I could not get much information from your Code Proj profile.

Thanks and Regards.....
Ashish Tripathi
____________________________

GeneralA+
txALI
4:40 12 Feb '08  
In my opinion the system is very simple and needs too many improvements to become practicaly useable.
GeneralRe: A+
Ashish Tripathi
4:48 12 Feb '08  
Hi,
Thanks for rating the project and giving your valuable time for the project. Please let me know the areas where for improvement I will try to implement the same.

Thanks and Regards.....
Ashish Tripathi
____________________________

GeneralSome possible improvements
AnandChavali
19:17 5 Feb '08  
Hi,
I used the tool yesterday and here are some possible improvements:

1. In adding items every time I have to click the button to add new, this can be avoided.
2. After adding items with descriptio , again while entering expenses you are asking to enter description, this can be picked up by default from the DB. If needed user will change this at the time of entering expenses.
3. In our normal monthly transactions, we get some money per month as salary or some thing and we will spend from it. There is NO provision to enter "Money Brought To home" and remaining money.

4. Last BUT NOT LEAST, there is NO or VERY LESS Code documentation. Its always good to document code while coding.

Thanks and Regards,
Anand.

GeneralRe: Some possible improvements
Ashish Tripathi
2:18 8 Feb '08  
Hi Anand,
Thanks for giving time and using 'AccountPlus'. I will try to implement the changes mentioned by you. And as you talked about the less code documentation for coming development I will have this thing mind. Very soon I will put the technical documentation also on the forum.

Thanks and Regards.....
Ashish Tripathi
____________________________

GeneralRe: Some possible improvements
AnandChavali
20:03 14 Feb '08  
Hi Ashish,

Just out of curiosity...
Are the improvements that I requested implemented? One more thing, while adding user or item, I have to repeatedly close and open the same dialog again and again to add more users/items. It would be better if you can ask "Add One more" before closing them.

Thanks and Regards,
Anand.

GeneralRe: Some possible improvements
AnandChavali
21:43 13 Mar '08  
Any updates whether the improvements requested are implemented?

Thanks and Regards,
Anand.

GeneralRe: Some possible improvements
Ashish Tripathi
23:30 31 Mar '08  
Hi Anand,
Thanks for getting back to me. In fact because of busy schedule I could not implement the same till now. If possible you please modify the same.

Thanks and Regards.....
Ashish Tripathi
____________________________

GeneralSimply Good !!!
Abhijit Jana
3:35 5 Feb '08  
Good Job...
5 from me Smile

Best Regards -----------------
Abhijit Jana View My Latest Article :- SpyNet : Your Network Spy "Success is Journey it's not a destination"

GeneralGood Job Ashih
NiceNai
3:00 5 Feb '08  
Please some more technical stuff.

Appu..
"Never explain yourself to anyone.
Because the person who likes you does n't need it.
And the person who dislikes you won't believe it."

GeneralCool!!!!
DeepGS
0:06 5 Feb '08  
Looks like a very good software for managing expenditures. Also it gives the facility to compare previous month's expenses. It can be used by 1 person or 'N' persons living togather. Automatic calculation reduces the headache of paper work. Good one. Congrats.
GeneralLooks like a user manual to me
gsans
23:40 4 Feb '08  
Are you sure this is not a product promotion? If is not so, why dont you try to add some technical details on the article please.
GeneralRe: Looks like a user manual to me
AshishKTripathi
23:48 4 Feb '08  
Hi Gsans,
Soryy for the incomplete information. In fact document was not complete when I had sent the article for post. Its complete now and contains all the information very soon you will get the technical documentation also. Any way entire source code is given with the application by the time document is not posted you can look into code and in case of any problem please write mail to me on ak.tripathi@yahoo.com

Thanks and Regards.....
Ashish
GeneralExactly what I am looking for...
AnandChavali
21:10 4 Feb '08  
I have not used it yet, but from the description I feel it IS the software I am looking for...

Thanks and Regards,
Anand.


Last Updated 10 Sep 2009 | Advertise | Privacy | Terms of Use | Copyright © CodeProject, 1999-2010