Студентам с вопросами о лабораторных работах сюда

Тема в разделе "WASM.BEGINNERS", создана пользователем IceStudent, 11 ноя 2006.

  1. OlechkaA

    OlechkaA New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2008
    Сообщения:
    35
    Вот мой поток:

    DWORD WINAPI ThreadFunc1 (PVOID pvParam)
    { char* str1=(char*)pvParam; // текущая строка файла
    FILE* fvih;
    DWORD written;
    //char vihod[13];
    char* fname1=TEXT("Type1.txt");
    fvih=fopen(fname1, "w");
    Razbor1(str1,fvih);

    //EnterCriticalSection (&gs);
    HRESULT hr;
    CoInitialize(NULL);
    ADODB::_ConnectionPtr connection;
    hr = connection.CreateInstance(__uuidof(ADODB::Connection));
    ADODB::_RecordsetPtr recordset;
    hr = recordset.CreateInstance(__uuidof(ADODB::Recordset));
    if(!SUCCEEDED(hr))
    return 1;
    _bstr_t bsConnString (L"Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=D:\\ТЕКСТ.mdb");
    _bstr_t bsUserID(L"");
    _bstr_t bsUserPwd(L"");
    connection->Open(bsConnString, bsUserID, bsUserPwd, ADODB::adConnectUnspecified);

    //Доступ к таблице
    _bstr_t bsCommand(L"select * from ");
    bsCommand +=fname1;
    recordset->Open(bsCommand,connection.GetInterfacePtr(),ADODB::adOpenForwardOnly, ADODB::adLockReadOnly,ADODB::adCmdText);

    //чтение таблице и запись в файл, а мне надо чтение в файле и запись в таблицу ВОТ
    int nNumFields = recordset->Fields->Count;
    while (!recordset->adoEOF)
    {
    //чтение из поля i
    for(long i=0;i<nNumFields;i++)
    {

    _bstr_t strName = recordset->Fields->Item->Name;
    _bstr_t strValue = recordset->Fields->Item->Value;
    _variant_t var;
    var = recordset->Fields->GetItem(strName)->GetValue();
    CString strText =(char *)_bstr_t(var);
    TCHAR * pBuf = (TCHAR *)(LPCTSTR)strText;
    // txt_length=lstrlen(pBuf);
    // pBuf[txt_length]=';';
    WriteFile(f, pBuf, txt_length+1, &written, NULL);
    }

    //printf (Rus("\nВведите имя выходного файла(1тип): "));
    //gets (vihod);
    //strcat(vihod,".txt");
    /*EnterCriticalSection(&gs);
    for(int i=0;!feof(fvh); i++)
    str=fgetc(fvh);
    str='\0';
    LeaveCriticalSection(&gs);
    */
    WriteFile((HANDLE)fvih, "\n", 1, &written, NULL);

    //передвижение по записям
    recordset->MoveNext();
    }

    //закрытие таблицы
    recordset->Close();
    //закрытие БД
    connection->Close();
    fclose(fvih);
    return 0;
    }
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Тебе нужно сформировать свою строку запроса на вставку. Например у тебя таблица называется MyTable, у которой два текстовых поля:
    Код (Text):
    1. recordset->Open("INSERT INTO MyTable VALUES ('Hello', 'Goodbye')", connection.GetInterfacePtr(), ADODB::adOpenForwardOnly, ADODB::adLockReadOnly, ADODB::adCmdText);
     
  3. OlechkaA

    OlechkaA New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2008
    Сообщения:
    35
    Сейчас попробую так сдалать. Спасибо большое!!
     
  4. taksos

    taksos New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2008
    Сообщения:
    23
    Вопрос по асму:
    Вызываю DOS-функцию 2Ch - определить время. В CH, CL, DH возвращаются соответственно часы, минуты, секунды. Подскажите, каким образом получитть количественные эквиваленты цифр каждого разряда, т.е. часы: 1 цифра, 2 цифра и т.д. Как я понял, нужно писать алгоритм перевода из hex в количественный эквивалент или нет?
     
  5. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Не из hex.
    Стандартно, делением на 10.
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    taksos
    Хотел тут давно у когонибудь спросить, зачем вам дос понадобилсо ?
     
  7. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Clerk
    За тем, что кое-кто в отличие от некоторых удосуживается посещать вузы и даже (!) выполнять предлагаемые там задания.
     
  8. taksos

    taksos New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2008
    Сообщения:
    23
    Да, посещаю вуз, а под конец семестра решил делать предлагаемые задания.

    Так тот ответ, значит, правильный - переводить делением на 10?
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    l_inc
    Это что тонкий намёк ?
    Я сам знаешь где видал мой вуз и профессоров всех тоже :lol: )
     
  10. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    taksos
    Лично для меня формулировка вида: "Количественные эквиваленты цифр каждого разряда", — загадка. Если речь идёт о выводе на экран (например, девятой ф-ией), то сначала нужно содержимое CH, CL и DH перевести в ASCII-представление. А как это сделать, зависит от того, в какой системе счисления Вы хотите видеть вывод на экран.
    Clerk
    Знаю. :) Вот потому и ответил.
     
  11. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    taksos
    которое стоит заменить умножением на константу
    http://www.wasm.ru/forum/viewtopic.php?id=28092
    http://www.wasm.ru/forum/viewtopic.php?id=18476
    под дос сам адаптируй, хотя 32 битныe команды можно и там юзать, только сегментные регистры правильно настрой ;)
     
  12. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    l_inc
    Почему такие дурацкие задания, не ну я конечно понимаю что профессор нуб, но дос не соответствует современному уровню чегото там..
     
  13. taksos

    taksos New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2008
    Сообщения:
    23
    Короче, мне нужно просто получить вместо, например
    11 часов, 23 минут, 0A секунд в соответствующих регистрах,в переменной ch1 цифру 1, в ch2 цифру 7, в m1 цифру 3, в m2 цифру 5 и т.д.
     
  14. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    taksos
    Cказал бы сразу, что тебе надо перевести байт в ascii. Имхо, самый простой способ Зубковский:
    Код (Text):
    1. cmp al,10
    2. sbb al,0x69
    3. das
    преобразует 16чную цифру в ascii представление. У тебя байт, т.е. 2 цифры, поэтому тебе надо сначала взять одну цифру (and al,0x0f) и преобразовать ее в ascii. Потом то же - со второй (shr al,4 (al старое конечно, до того, как убрали верхние 4 бита).
    Например для ch:
    Код (Text):
    1. push cx
    2. and ch,0x0f
    3. cmp ch,10
    4. sbb ch,0x69
    5. das
    6. mov byte [ch1],ch
    7. pop cx
    8. shr ch,4
    9. cmp ch,10
    10. sbb ch,0x69
    11. das
    12. mov byte [ch2],ch
     
  15. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    meduza
    taksos нужны были цифры десятичного представления.
    taksos
    Учитывая, что в десятичном представлении значений у Вас не будет чисел с более чем двумя цифрами, можно сделать так:
    Код (Text):
    1. mov al,ch
    2. aam
    3. mov [ch1],ah
    4. mov [ch2],al
    5.  
    6. mov al,cl
    7. aam
    8. mov [m1],ah
    9. mov [m2],al
    10.  
    11. mov al,dh
    12. aam
    13. mov [s1],ah
    14. mov [s2],al
     
  16. cray0000

    cray0000 New Member

    Публикаций:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    4
    Как сложить 2 double-числа используя 16-битовые регистры (ax,bx,cx...)?
    Нужна ли какая-то специальная операция чтобы "включить" 32-битовые регитры (eax,ebx,ecx...) или всё дело в компиляторе?
    P.S. Спасибо за ответ.
     
  17. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    cray0000
    Что такое "double-число"? Вещественное? Или типа dword?..

    Если ты имеешь ввиду сложить два 32битных числа, использую 16битные регистры, то:
    Код (Text):
    1. ; складывает ax:bx и cx:dx, результат в CF:ax:bx)
    2. add bx,dx
    3. adc ax,cx
     
  18. cray0000

    cray0000 New Member

    Публикаций:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    4
    сенкс, я имел ввиду двойое слово (DD). А как насчёт 32-битовых регистров? Надо компилятор поновее? У меня tasm из BP7 ругается на eax,ebx...
     
  19. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    cray0000
    Если ты пишешь для 16-битного ДОСа и 16-битного процессора, то 32-битных регистров у тебя не будет независимо от компилятора.
     
  20. cray0000

    cray0000 New Member

    Публикаций:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    4
    Ну это ясно.
    32-битная система, процессор 32-битный. При создании простенького exe-шника:
    Код (Text):
    1. .model    small
    2. .stack   100h
    3. .data
    4. X          DD          2
    5. Y          DD          3
    6. .code
    7. START:      mov      ax,@data
    8.             mov      ds,ax
    9.             mov      eax,X
    10.             mov      ebx,Y
    11.             add      eax,ebx
    12.             mov      ax,4C00h
    13.             int       21h
    14.             end      START
    ругается что eax и ebx неопределены