SQL & insert into & assembler

Тема в разделе "WASM.BEGINNERS", создана пользователем Rito, 17 авг 2008.

  1. Rito

    Rito New Member

    Публикаций:
    0
    Регистрация:
    30 май 2008
    Сообщения:
    59
    Помогите разобраться с проблемой.
    Читал туторы Iczelion'a по работе с ODBC. Кое что понял, как читать, а как вставлять данные в БД? Почитал книги непосредственно по SQL. Есть инструкция
    insert into X values XX
    Как её оформить и с помощью неё вставить данные на асме?
    Код (Text):
    1. ;===========================================
    2. .data
    3. SQLStatement1       db      "insert into bla values ?",0
    4. ;===========================================
    5. .code
    6. invoke SQLAllocHandle, SQL_HANDLE_STMT, hConn, addr hStmt
    7. .IF ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO
    8.     invoke SQLExecDirect, hStmt, addr SQLStatement1, sizeof SQLStatement1
    9.     .if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO
    10.     .else
    11.         invoke  MessageBox,0,0,0,0
    12.     .endif
    13. .else
    14. .ENDIF
    Тут возвращается ошибка.
     
  2. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    SQLStatement1 db "insert into bla values (?)",0

    По-моему, так должно быть.
     
  3. Rito

    Rito New Member

    Публикаций:
    0
    Регистрация:
    30 май 2008
    Сообщения:
    59
    Неа, не хочет. Всё равно ошибку даёт.
    И ещё, как мне SQLStatement1 связать с какими то данными. Мне ж не просто надо что то вставить в БД, а осмысленную запись какую нить. которую я введу например в EDITTEXT'e
    Т.е. (?) надо как то связать с нужными данными?
     
  4. DJK

    DJK Member

    Публикаций:
    0
    Регистрация:
    8 авг 2006
    Сообщения:
    39
    Rito
    А вы перед тем как посылать запрос к серверу БД саму базу данных то создаете и выбираете??? если нет, то смысла в посылке команды insert тут нет. Создайте для начала базу/

    Попробуй код
    Код (Text):
    1. ;===========================================
    2. .data
    3. SQLCreateDB     db      "CREATE DATABASE test_base_name",0
    4. SQLSelectDB     db      "USE test_base_name",0
    5. SQLCreateTable      db      "CREATE TABLE test_table (id_element INT(11) default NULL auto_increment, text char(60) default NULL, PRIMARY KEY (id_element)) ENGINE=MyISAM",0
    6. SQLInsert       db      'INSERT INTO test_table (id_element, text) VALUES (NULL, "Hello World")',0
    7.  
    8. MessageText1        db      "Unable to create DATABASE",0
    9. MessageText2        db      "Unable to use DATABASE",0
    10. MessageText3        db      "Unable to create TABLE",0
    11. MessageText4        db      "Unable to insert operation",0
    12. ;===========================================
    13. .code
    14. invoke SQLAllocHandle, SQL_HANDLE_STMT, hConn, addr hStmt
    15. .IF ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO
    16.  
    17.     invoke SQLExecDirect, hStmt, addr SQLCreateDB, sizeof SQLCreateDB ;Создаем базу данных
    18.     .if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO
    19.  
    20.         invoke SQLExecDirect, hStmt, addr SQLSelectDB, sizeof SQLSelectDB ;Выбираем созданную БД
    21.         .if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO
    22.  
    23.             invoke SQLExecDirect, hStmt, addr SQLCreateTable, sizeof SQLCreateTable
    24.             ;Создаем таблицу в БД
    25.             ;Название таблицы - test_table, поля id_element - целое, 11 значащих цифр; text - текстовое поле размером 60 байт
    26.             ;первичный глюч - id_element
    27.  
    28.             .if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO
    29.  
    30.                 invoke SQLExecDirect, hStmt, addr SQLInsert, sizeof SQLInsert
    31.                 .if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO
    32.                 .else
    33.                     invoke  MessageBox,addr MessageText4,0,0,0
    34.                 .endif
    35.  
    36.             .else
    37.                 invoke  MessageBox,addr MessageText3,0,0,0
    38.             .endif
    39.  
    40.         .else
    41.             invoke  MessageBox,addr MessageText2,0,0,0
    42.         .endif 
    43.        
    44.     .else
    45.         invoke  MessageBox,addr MessageText1,0,0,0
    46.     .endif
    47. .else
    48. .ENDIF
    создание разного операций осмысленных
    Код (Text):
    1. ;===========================================
    2. .data
    3. MessageText1        db      "Unable to create DATABASE",0
    4. SQLCreateDB     db      "CREATE DATABASE %s",0
    5. SQLBuffer       db      4096 dup(0)
    6. TextBuffer      db      4096 dup(0)
    7. ;===========================================
    8. .code
    9. invoke  SendMessageA, HwndTextBox, WM_GETTEXTLENGTH, 0, 0
    10.  
    11. invoke  SendMessageA, HwndTextBox, WM_GETTEXT, addr TextBuffer, eax
    12.  
    13. invoke  wsprintfA, addr SQLBuffer, addr SQLCreateDB, addr TextBuffer  
    14. add esp,12
    15.  
    16. invoke SQLAllocHandle, SQL_HANDLE_STMT, hConn, addr hStmt
    17. .IF ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO
    18.     invoke  lstrlenA, addr SQLBuffer
    19.     invoke SQLExecDirect, hStmt, addr SQLBuffer, eax ;Создаем базу данных
    20.     .if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO
    21.     else
    22.         invoke  MessageBox,addr MessageText1,0,0,0
    23.     .endif
    24. .else
    25. .ENDIF