Announcement

Collapse
No announcement yet.

vb&oracle

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • vb&oracle

    ผมทำโปรเจค บันทึกvdoวงจรปิดลงฐานข้อมูล อยากทราบโค๊ตที่ทำให้vbสามารถติดต่อกับoracleได้และโค๊ตที่ทำให้ vb ติดต่อกับกล้องcctvได้ด้วยอะครับ โปรเจคนี้บังคับใช้vb2005กับoracleคับ ยากๆๆมาก

  • #2
    ดูเหมือนจะทำเป็นอาชีพได้เลยนะครับ โปรเจ็คแบบนี้

    Option Explicit

    Private Sub Form_Load()
    Dim conn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim txt As String
    Dim fld As Field

    ' Open a connection using Oracle ODBC.
    Set conn = New ADODB.Connection
    conn.ConnectionString = _
    "Driver={Microsoft ODBC for Oracle};" & _
    "UID=user_name;PWD=user_passsword"
    conn.Open

    ' Open the FuelTypes table.
    Set rs = New ADODB.Recordset
    rs.Open "TableName", conn, adOpenDynamic, adLockOptimistic, adCmdTable

    ' List the data.
    Do While Not rs.EOF
    txt = ""
    For Each fld In rs.Fields
    txt = txt & Trim$(fld.Value) & ", "
    Next fld
    If Len(txt) > 0 Then txt = Left$(txt, Len(txt) - 2)
    List1.AddItem txt
    rs.MoveNext
    Loop

    rs.Close
    conn.Close
    End Sub
    Dim con As ADODB.Connection
    Dim rs1 As ADODB.Recordset

    Private Sub Form_Load()
    Set con = New ADODB.Connection
    Set rs1 = New ADODB.Recordset
    con.Open "Provider=MSDAORA.1;Password=xyz;UserID=raminder;Persist Security Info=True"
    rs1.CursorLocation = adUseClient
    rs1.Open "Tablename", con, adOpenStatic, adLockOptimistic, -1
    End Sub

    Dim Q As OraAQ
    Dim QMsg As OraAQMsg

    Set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
    Set empDb = OO4OSession.OpenDatabase("AQ_DUAL", "aq/aq", 0)
    Set Q = empDb.CreateAQ("AQQUEUE")
    'Specify the message value.

    Set QMsg = Q.AQMsg(ORATYPE_OBJECT, "MESSAGE_TYPE", "AQ")


    Set QMsg = Q.AQMsg
    'HERE for Error ORA-25215 'user_data type and queue type do not match'
    Q.Dequeue

    # Oracle Code


    PROCEDURE GetXML
    (temp IN NUMBER,
    OutputXML OUT CLOB)
    IS
    --.....Variable Declaration
    BEGIN
    OutputXML :=EMPTY_CLOB();
    DBMS_LOB.CREATETEMPORARY(OutputXML,TRUE);

    stCurrentXMLNode := ''; --Load XML Denotion
    --Code to get data, make XML and store into CLOB variable goes here....
    DBMS_LOB.WRITEAPPEND(OutputXML, LENGTH(stCurrentXMLNode),stCurrentXMLNode); --Finally complete Loading Data in OUTPUT CLOB
    COMMIT;
    END GetXML;

    But VB 6 was not supporting this OUT CLOB parameter OutputXML and would throw Microsoft ODBC inconsistent Datatype or Access Violation Error for every datatype I tried (VB adDataypes)

    Then what I did is divided this collected CLOB in distinct ARRAY (Table) of VARCHAR2 variables of some fixed size(say 4000) Using this code

    CREATE OR REPLACE PACKAGE BODY MYPACKEGE
    AS
    TYPE tblXML IS TABLE OF VARCHAR2(4000) INDEX BY BINARY_INTEGER; --VRACHAR2 ARRAY Table

    PROCEDURE GetXML
    (temp IN NUMBER,
    OutputXML OUT tblXML)
    IS
    --.....Variable Declaration
    BEGIN
    OutputXML :=EMPTY_CLOB();
    DBMS_LOB.CREATETEMPORARY(OutputXML,TRUE);

    stCurrentXMLNode := ''; --Load XML Denotion
    --Code to get data, make XML and store into CLOB variable goes here....
    DBMS_LOB.WRITEAPPEND(OutputXML, LENGTH(stCurrentXMLNode),stCurrentXMLNode); --Finally complete Loading Data in OUTPUT CLOB

    --**************************************************************************************************************---
    output_var := ' '; -- NonEmpty String
    offset_var := 0; -- Offset To start chopping with
    amount_var := 4000; -- Fixed SIze Varchar2

    nCount := 0;
    WHILE output_var <> ''
    LOOP
    DBMS_LOB.READ(OutputXML,amount_var,offset_var,output_var);
    --Load character Chunk 'output_var' Cut from previous statement into Array element
    OutputXML(nCount) := output_var;
    nCount := nCount + 1;
    offset_var:= amount_var + offset_var + 1;
    END LOOP;
    --**************************************************************************************************************---
    COMMIT;
    END GetXML;
    End MYPACKAGE;

    Now use following VB 6 code to load this into a Recordset, then loope thru recordset and load it into a String (max size 65K characters) or variant(max size 2G Characaters)

    # VB Code

    Dim objCmd As New ADODB.Command
    Dim objRS As New ADODB.Recordset

    Dim vXML As Variant
    With objCmd
    .ActiveConnection = "{Microsoft ODBC DSN ConnectionString}"
    .CommandType = adCmdText
    .CommandTimeout = 30
    .CommandText = "{call MYPACKAGE.GetXML(?, {resultset 10000, OutputXML})}"
    .Parameters.Append .CreateParameter("temp", adNumeric, adParamInput, , 1234) 'Input Paramneter

    Set objRS = .Execute 'Load Output VARCHAR2 Array into RecordSet

    vXML = ""
    While Not objRS.EOF
    vXML = vXML & objRS(0).Value 'Loading Large CLOB (by looped appending) into a Variant
    objRS.MoveNext
    Wend
    End With

    1.ลองดูขั้นตอนที่ 7,8 และ 9 จาก เอกสารนี้นะครับ
    " http://www.exzilla.net/docs/starter/toc-oracle-01.php "

    2. จากนั้น ขึ้นอยู่กับว่า คุณ จะเลือกใช้ VB ติดต่อ กับ Oracle ผ่านทางอะไร เช่น ODBC,OLE DB, OO4O
    ลองดูแนวทางจาก URL นี้นะครับ
    " http://www.exzilla.net/tech/windows/...#_Connectivity "

    " http://www.exzilla.net/docs/dataAcce...ata-access.php "



    ช่วยได้เท่านี้ละครับผม

    Comment


    • #3
      ขอบคุณมากๆครับ อยากได้โค๊ดติดต่อvbกับกล้อง cctv ด้วยอะคับ ใครพอรู้บ้างช่วยหน่อยนะครับ

      Comment


      • #4
        ขอความกรุณาด้วยนะครับ ต้องการจริงๆท่านใดพอมีความรู้บ้าง

        Comment


        • #5
          อาจจะต้องมีเสียทรัพย์ได้ อ่านดูครับ
          http://th.88db.com/th/Services/Post_...335&lang=en-us

          ยากจริงๆครับ เพราะที่ผมเคยผ่านมา มันก็มีโปรแกรมให้อยู่แล้วครับผม

          Comment

          Working...
          X