Arsip: Validasi sesuatu yang unique...

 
user image
more 18 years ago

Random

Maaf kalo judulnya ga terlalu berkaitan, soalnya bingung nentuin judul.... Katakanlah di sebuah form isinya ada : 1 ComboBox serta 2 EditBox. Isi ComboBox itu hasil query dari table item (mis : handphone, meja, pensil, dll) EditBox 1 tempat user isi qty yg dia mau minta. EditBox 2 bakalan jadi tempat dimana qty tersebut dikalikan secara otomatis dengan harga item. Penyelesaiannya kepikiran : Ambil isi ComboBox, locate nama item tersebut di table item. Ambil harganya, trus kali-in deh sama qty. Tapi ini cuma bisa berhasil kalo nama item-nya unique, kalo ada beberapa item yang namanya sama bisa bikin ngaco kan. Berarti musti bikin unique constraint lagi kan di SQL Server 2000. Tapi masalahnya, _ketika awalnya baru mau input item_ , ada ga validasi sederhana untuk menghadapi kemungkinan nama item double ? Apa tetep musti diquery -> select item_name from tb_item where item_name='x', trus diliat hasilnya eof atau ga ? Atau ada cara lain yang lebih baik (dan yang jelas ga malah tambah bikin ribet) ? Mungkinkah ComboBox menyimpan 2 value ? Jadi bukan cuma item_name-nya aja yang disimpan, tapi juga item_price-nya (jadinya ketika item tersebut diselect, bisa langsung ngambil item_price-nya buat dikaliin?
user image
more 18 years ago

DelphiExpert

jangan pakai nama item utk locate record, gunakan ItemID (key). waktu memasukkan data ke ComboBox ID harus disertakan, caranya terserah dikau. bisa dimasukkan dengan model delimiter '=', atau disisipin sebagai object. contoh dengan delimiter:

ComboBox1.Items.Values['001']:= 'Mouse';
ComboBox1.Items.Values['002']:= 'Keyboard';
... 
// cara baca key-nya:
Key:= ComboBox1.Items.Names[Index];
TableX.Location(.. Key);
user image
more 18 years ago

cyber_hecker

kalo data memang di load dari query, kenapa tidak menggunakan DBLookupComboBox saja ? lebih simple, kita sudah tidak melakukan pencarian lagi... tetapi langsung mengambil nilai yang sudah tersedia dari querynya. koding :
unit uFMain;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, StdCtrls, DBCtrls, Mask, Buttons, ExtCtrls;
type
  TFMain = class(TForm)
    adoCon: TADOConnection;
    qItem: TADOQuery;
    qItemID: TAutoIncField;
    qItemnm_barang: TWideStringField;
    qItemharga: TFloatField;
    qItemsKet: TWideStringField;
    dsItem: TDataSource;
    DBLookupComboBox1: TDBLookupComboBox;
    Label1: TLabel;
    Label2: TLabel;
    DBEdit1: TDBEdit;
    Edit1: TEdit;
    Edit2: TEdit;
    Label3: TLabel;
    Label4: TLabel;
    BitBtn1: TBitBtn;
    Bevel1: TBevel;
    procedure FormCreate(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  FMain: TFMain;
implementation
{$R .dfm}
procedure TFMain.FormCreate(Sender: TObject);
begin
  qItem.Open;
end;
procedure TFMain.BitBtn1Click(Sender: TObject);
begin
  Edit2.Text := FormatFloat('0.##',StrToFloat(Edit1.Text)  
    qItem.FieldByName('harga').AsFloat);
end;
end.
source formnya (untuk melihat setting properties komponen)
object FMain: TFMain
  Left = 192
  Top = 109
  Width = 321
  Height = 206
  Caption = 'Pricing by cyber_hecker'
  Color = clBtnFace
  Font.Charset = ANSI_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = 
  OldCreateOrder = False
  Position = poScreenCenter
  ShowHint = True
  OnCreate = FormCreate
  PixelsPerInch = 96
  TextHeight = 13
  object Label1: TLabel
    Left = 16
    Top = 16
    Width = 75
    Height = 13
    Caption = 'Daftar Barang :'
  end
  object Label2: TLabel
    Left = 55
    Top = 40
    Width = 36
    Height = 13
    Caption = 'Harga :'
    FocusControl = DBEdit1
  end
  object Label3: TLabel
    Left = 51
    Top = 80
    Width = 40
    Height = 13
    Caption = 'Jumlah :'
  end
  object Label4: TLabel
    Left = 60
    Top = 104
    Width = 31
    Height = 13
    Caption = 'Total :'
  end
  object Bevel1: TBevel
    Left = 8
    Top = 8
    Width = 297
    Height = 129
  end
  object DBLookupComboBox1: TDBLookupComboBox
    Left = 104
    Top = 16
    Width = 193
    Height = 19
    Ctl3D = False
    KeyField = 'ID'
    ListField = 'sKet'
    ListSource = dsItem
    ParentCtl3D = False
    TabOrder = 0
  end
  object DBEdit1: TDBEdit
    Left = 104
    Top = 40
    Width = 134
    Height = 19
    TabStop = False
    Color = clInfoBk
    Ctl3D = False
    DataField = 'harga'
    DataSource = dsItem
    ParentCtl3D = False
    ReadOnly = True
    TabOrder = 1
  end
  object Edit1: TEdit
    Left = 104
    Top = 80
    Width = 121
    Height = 19
    Ctl3D = False
    ParentCtl3D = False
    TabOrder = 2
    Text = '0'
  end
  object Edit2: TEdit
    Left = 104
    Top = 104
    Width = 121
    Height = 19
    Ctl3D = False
    ParentCtl3D = False
    TabOrder = 3
    Text = '0'
  end
  object BitBtn1: TBitBtn
    Left = 224
    Top = 144
    Width = 75
    Height = 25
    Caption = 'Hitung'
    TabOrder = 4
    OnClick = BitBtn1Click
  end
  object adoCon: TADOConnection
    ConnectionString = 
      'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=dbCyber.mdb;Persist' +
      ' Security Info=False'
    LoginPrompt = False
    Mode = cmShareDenyNone
    Provider = 'Microsoft.Jet.OLEDB.4.0'
    Left = 16
    Top = 128
  end
  object qItem: TADOQuery
    Connection = adoCon
    CursorType = ctStatic
    Parameters = <>
    SQL.Strings = (
      
        'SELECT tbBarang.ID, tbBarang.nm_barang, tbBarang.harga, [tbBaran' +
        'g]![ID] & '' - '' & [tbBarang]![nm_barang] AS sKet'
      'FROM tbBarang;')
    Left = 56
    Top = 128
    object qItemID: TAutoIncField
      FieldName = 'ID'
      ReadOnly = True
    end
    object qItemnm_barang: TWideStringField
      FieldName = 'nm_barang'
      Size = 50
    end
    object qItemharga: TFloatField
      FieldName = 'harga'
    end
    object qItemsKet: TWideStringField
      FieldName = 'sKet'
      ReadOnly = True
      Size = 255
    end
  end
  object dsItem: TDataSource
    DataSet = qItem
    Left = 72
    Top = 144
  end
end
sorry.. contoh source belum bisa di upload.. komputer disini lelet banget :D
user image
more 18 years ago

Random

@ both : Thanks. Kebetulan saya baru nyoba saran cyber_hecker dan berhasil. Tapi yang dibilang DelphiExpert kayaknya saya ngerti maksudnya. :)
user image
more 18 years ago

Random

DBLookUpComboBox ga bisa buat nampilin data dengan cara "DBLookUpComboBox1.text := dst" ya ? Dibilangnya statusnya readonly atau apa gitu.
user image
more 18 years ago

cyber_hecker

nilai pada DBLookupComboBox tidak bisa di set kayak gitu, karena datanya diambil lewat database. jika ingin mengeset nilai DBLookupComboBox, harus KeyValue nya yang diset. contoh :
DBLookupComboBox1.KeyValue := 3;
user image
more 18 years ago

Random

Berarti untuk beberapa kasus masih mending pake ComboBox biasa ya. Soalnya ada sebuah ComboBox di form saya yang berfungsi ganda.... 1. Kalo form baru dibuka, sekedar untuk menampilkan record terakhir (misal : city) yang diambil dari TQuery. 2. Kalo mau tambah data baru, dibuat untuk milih (dalam hal ini city) ... dan kalau 'maksa' pake DBLookupComboBox berarti saya harus : tambahin TDataSource lagi buat nampung isi TQuery, pindahin property ListSource di coding (karena TDataSource-nya beda), trus ubah property KeyValue-nya. Malah jadi ribet. Hehehe. CMIIW ?
more ...
  • Pages:
  • 1
Share to

AI Forward

🚀 We're thrilled to partner with Alibaba Cloud for "AI Forward - Alibaba Cloud Global Developer Summit 2025" in Jakarta! Join us and explore the future of AI. Register now: https://int.alibabacloud.com/m/1000400772/
#AlibabaCloud #DeveloperSummit #Jakarta #AIFORWARD

Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com