B4X:
Private Sub DosaveRecord
B4XLoadingIndicator1.Show
Dim LedgerName As String = Txt_SLedger.Text.Trim
If LedgerName.Length < 3 Then
xui.MsgboxAsync("Please enter a valid Supplier Name (min 3 characters).", "Validation")
Return
End If
' Check for duplicate
Wait For (LedgerExists(LedgerName)) Complete (exists As Boolean)
If exists Then
xui.MsgboxAsync("A ledger with this name already exists.", "Duplicate Entry")
Return
End If
If TxtOpBalanceAmt.Text = "" Then TxtOpBalanceAmt.Text = "0"
Dim Dr As String = "0", Cr As String = "0", OpDr As String = "0", OpCr As String = "0"
If Txt_DrCr.SelectedItem = "Dr" Then
Dr = TxtOpBalanceAmt.Text
OpDr = TxtOpBalanceAmt.Text
Else
Cr = TxtOpBalanceAmt.Text
OpCr = TxtOpBalanceAmt.Text
End If
Dim MobNo As String = Txt_MobileNo.Text.Trim
If MobNo = "" Or MobNo = "0" Then MobNo = "0"
' Sanitize inputs (basic SQL injection protection)
Dim SafeLedgerName As String = LedgerName.Replace("'", "''")
Dim SafeEmail As String = Txt_Email.Text.Replace("'", "''")
Dim SafeBank As String = Txt_BranchName.Text.Replace("'", "''")
Dim SafeAccNo As String = Txt_AccountNo.Text.Replace("'", "''")
Dim SafeIFSC As String = Txt_IFSCcode.Text.Replace("'", "''")
' Dim mysqlstr As String = $"INSERT INTO ledgers (LedgerName, LedgerCode, AccountGroup, accounttype, DocBranch, Route, village, MilkType, CustType, MemCode, ChairName, Cmob, emailid, BankName, BacNo, IFCcode, createdby, Isactive, Dr, Cr, OpDr, OpCr, IsBillWise, CreditPeriod, Currency, currentbalance, LedgerNameTemp, BankAccNo, IsSendSMS, DCID) VALUES ('${SafeLedgerName}', '${Txt_AccID.Text}', 'Suppliers Account', 'Suppliers Account', 'Local', '${Txt_Route.SelectedItem}', '${Txt_Village.SelectedItem}', '${Txt_Milktype.SelectedItem}', '${Txt_Custtype.SelectedItem}', '${Txt_MemCode.Text}', '${SafeLedgerName}', '${MobNo}', '${SafeEmail}', '${SafeBank}', '${SafeAccNo}', '${SafeIFSC}', '${Starter.CurrentUserName}', '1', '${Dr}', '${Cr}', '${OpDr}', '${OpCr}', '1', '30', 'INR', '0', '${SafeLedgerName}', '${SafeAccNo}', '0', '${DCID}')"$
' Log(mysqlstr)
' Try
' Wait For (Starter.Connect) Complete (success As Boolean)
' If success Then
' Starter.mysql.BeginTransaction
' Starter.mysql.ExecNonQuery(mysqlstr)
' Starter.mysql.TransactionSuccessful
' Starter.CloseConnection
' Log("Ledger saved")
' End If
' Catch
' Log("Save error: " & LastException)
' xui.MsgboxAsync("Failed to save record.", "Error")
' Return
' End Try
'
' ' Opening balance
' If TxtOpBalanceAmt.Text > 0 Then
' Dim transStr As String = $"INSERT INTO ledgerbook (LedgerName, TransCode, InvoiceNo, InvoiceType, InvoiceName, sno, Dr, Cr, LedgerGroup, AcLedger, IsAdvance, IsDeleted, UserName, Narration, ConRate, DCID) VALUES ('${SafeLedgerName}', '0', '0', 'Opening Balance', 'Opening Balance', '1', '${Dr}', '${Cr}', '${Txt_Custtype.SelectedItem}', 'Opening', '0', '0', '${Starter.CurrentUserName}', 'Opening Balances', '1', '${DCID}')"$
' Log(transStr)
' Try
' Wait For (Starter.Connect) Complete (success As Boolean)
' If success Then
' Starter.mysql.BeginTransaction
' Starter.mysql.ExecNonQuery(transStr)
' Starter.mysql.TransactionSuccessful
' Starter.CloseConnection
' End If
' Catch
' Log("Opening balance error: " & LastException)
' End Try
' End If
' Start single DB session
Wait For (Starter.Connect) Complete (connected As Boolean)
If connected = False Then
xui.MsgboxAsync("Database connection failed.", "Error")
B4XLoadingIndicator1.Hide
Return
End If
Try
Starter.mysql.BeginTransaction
Dim mysqlstr As String = $"INSERT INTO ledgers (LedgerName, LedgerCode, AccountGroup, accounttype, DocBranch, Route, village, MilkType, CustType, MemCode, ChairName, Cmob, emailid, BankName, BacNo, IFCcode, createdby, Isactive, Dr, Cr, OpDr, OpCr, IsBillWise, CreditPeriod, Currency, currentbalance, LedgerNameTemp, BankAccNo, IsSendSMS, DCID) VALUES ('${SafeLedgerName}', '${Txt_AccID.Text}', 'Suppliers Account', 'Suppliers Account', 'Local', '${Txt_Route.SelectedItem}', '${Txt_Village.SelectedItem}', '${Txt_Milktype.SelectedItem}', '${Txt_Custtype.SelectedItem}', '${Txt_MemCode.Text}', '${SafeLedgerName}', '${MobNo}', '${SafeEmail}', '${SafeBank}', '${SafeAccNo}', '${SafeIFSC}', '${Starter.CurrentUserName}', '1', '${Dr}', '${Cr}', '${OpDr}', '${OpCr}', '1', '30', 'INR', '0', '${SafeLedgerName}', '${SafeAccNo}', '0', '${DCID}')"$
Log(mysqlstr)
Starter.mysql.ExecNonQuery(mysqlstr)
' --- 2. Insert opening balance (if any) ---
If TxtOpBalanceAmt.Text > 0 Then
Dim transStr As String = $"INSERT INTO ledgerbook (LedgerName, TransCode, InvoiceNo, InvoiceType, InvoiceName, sno, Dr, Cr, LedgerGroup, AcLedger, IsAdvance, IsDeleted, UserName, Narration, ConRate, DCID) VALUES ('${SafeLedgerName}', '0', '0', 'Opening Balance', 'Opening Balance', '1', '${Dr}', '${Cr}', '${Txt_Custtype.SelectedItem}', 'Opening', '0', '0', '${Starter.CurrentUserName}', 'Opening Balances', '1', '${DCID}')"$
Log(transStr)
Try
' Wait For (Starter.Connect) Complete (success As Boolean)
' If success Then
' Starter.mysql.BeginTransaction
Starter.mysql.ExecNonQuery(transStr)
' Starter.mysql.TransactionSuccessful
' Starter.CloseConnection
' End If
Catch
Log("Opening balance error: " & LastException)
End Try
End If
Starter.mysql.TransactionSuccessful
Log("Ledger and opening balance saved successfully")
Catch
Log("Save error: " & LastException)
xui.MsgboxAsync("Failed to save record: " & LastException.Message, "Error")
' Transaction auto-rolls back on exception
Starter.CloseConnection
B4XLoadingIndicator1.Hide
Return
End Try
Starter.CloseConnection
' Update counters
If Txt_Custtype.SelectedItem = "Milk Member" Then
Wait For (UpdateMilkMemID) complete (NewMemId As String)
'UpdateMilkMemID
Log("New mem Code: " & NewMemId)
Else
Txt_MemCode.Text = "0"
End If
Wait For (UpdateAccountCode) Complete (NewAccCode As String)
If NewAccCode <> "" Then
Log("New Account Code: " & NewAccCode)
Else
Log("Failed to update or retrieve Account Code")
End If
' Refresh next ID
Wait For (FetchAccountCode) Complete (newAccID As String)
Txt_AccID.Text = "Acc" & newAccID
' Reset form
Txt_SLedger.Text = ""
TxtOpBalanceAmt.Text = "0.00"
Txt_MobileNo.Text = ""
Txt_Email.Text = ""
Txt_AccountNo.Text = ""
Txt_IFSCcode.Text = "0"
Txt_Custtype.SelectedIndex = 1
BtnNew.Enabled = True
btn_Save.Enabled = False
' btn_Save.Color = Colors.Gray
PanMemCode.Visible = False
dyt.SuccessMessageToast = "Save Successful!"
Txt_SLedger.TextField.RequestFocus
' dyt.ShowSuccess
B4XLoadingIndicator1.Hide
End Sub
when run in debug mode then query is secussfully insert in database. but when release mode run the code then error bellow
B4X:
Sub Process_Globals
'These global variables will be declared once when the application starts.
'These variables can be accessed from all modules.
Public mysql As JdbcSQL
Public driver As String = "com.mysql.jdbc.Driver"
'Public jdbcUrl As String = "jdbc:mysql://207.174.214.245:3000/amarn_d?characterEncoding=utf8" 'windows host
'Public jdbcUrl As String = "jdbc:mysql://208.91.198.26:3000/amarn_d?characterEncoding=utf8"
Public jdbcUrl As String = "jdbc:mysql://207.174.214.245:3000/amarn_d?useSSL=False&characterEncoding=utf8" 'lunix host
'208.91.198.26
Public Username As String = "amarn_amar"
Public Password As String = "Amarnath@#4568"
Public CurrentUserName As String="Admin"
Public HtmlCSS As String
Public SQL1 As SQL
' Public TastyTos As TastyToast
Public DyTost As DynamicToast
Public csu As CallSubUtils
'
Public fFileProvider As FileProvider
End Sub