Artifact
2dfa71b19000414862a7ff5b5a713c288e4054f3:
- File
sqlite1c/SQL_DBF/longstrreader.cpp
— part of check-in
[8916a4c40e]
at
2008-11-18 08:54:41
on branch trunk
—
- Сделано принудительное округление чисел при типизации :Число, тк получатели
результата (кроме ТаблицыЗначений) сами этого не делают.
- Исправлена работа типизации при обработке NULL значений, тк получатели
результата (кроме ТаблицыЗначений) сами этого не делают.
- Изменена логика работы с Begin/EndReadSequnce. В немонопольном режиме падение
производительности, зато не падает.
- Добавлен метод SQLiteQuery::ОбработатьТекстЗапроса
- Добавлено свойство SQLiteQuery::ВыполнятьВТранзакции
- Исправлена ошибка программы при подключении таблиц шапки документа, не имеющего
реквизитов шапки.
- Исправлена ошибка при выборке из таблиц 1С, иногда могущая привести к зависанию
программы.
- Добавлено подключение таблиц ЖурналовРасчетов ДБФ версии 1С.
- Исправлена укладка списка объектов при наличии иерархии - неверно укладывались
объекты, содержащие в идентификаторе русские буквы (распределенка с русским
префиксом ИБ).
- Добавлен объект SQLiteDataProvider - поставщик данных табличного поля 1С++ для
таблиц sqlite и таблиц 1С DBF-версии.
(user:
orefkov
size: 1269)
0000: 2f 2f 20 6c 6f 6e 67 73 74 72 72 65 61 64 65 72 // longstrreader
0010: 2e 63 70 70 0d 0a 23 69 6e 63 6c 75 64 65 20 22 .cpp..#include "
0020: 53 74 64 41 66 78 2e 68 22 0d 0a 23 69 6e 63 6c StdAfx.h"..#incl
0030: 75 64 65 20 22 6c 6f 6e 67 73 74 72 72 65 61 64 ude "longstrread
0040: 65 72 2e 68 22 0d 0a 0d 0a 73 74 72 75 63 74 20 er.h"....struct
0050: 6b 65 79 20 3a 20 43 4b 65 79 4f 62 6a 0d 0a 7b key : CKeyObj..{
0060: 0d 0a 09 6b 65 79 28 43 49 6e 64 65 78 20 2a 70 ...key(CIndex *p
0070: 49 29 20 3a 20 43 4b 65 79 4f 62 6a 28 70 49 2c I) : CKeyObj(pI,
0080: 20 30 2c 20 30 29 7b 7d 0d 0a 09 76 69 72 74 75 0, 0){}...virtu
0090: 61 6c 20 76 6f 69 64 20 50 72 65 70 61 72 65 4b al void PrepareK
00a0: 65 79 28 29 0d 0a 09 7b 0d 0a 09 09 6d 5f 70 53 ey()...{....m_pS
00b0: 74 6f 72 65 4f 62 6a 2d 3e 46 58 5f 53 74 72 69 toreObj->FX_Stri
00c0: 6e 67 28 30 2c 20 28 63 68 61 72 2a 29 70 46 69 ng(0, (char*)pFi
00d0: 65 6c 64 49 44 2c 20 34 2c 20 31 29 3b 0d 0a 09 eldID, 4, 1);...
00e0: 09 6d 5f 70 53 74 6f 72 65 4f 62 6a 2d 3e 46 58 .m_pStoreObj->FX
00f0: 5f 53 74 72 69 6e 67 28 31 2c 20 28 63 68 61 72 _String(1, (char
0100: 2a 29 70 4f 62 6a 49 44 2c 20 39 2c 20 31 29 3b *)pObjID, 9, 1);
0110: 0d 0a 09 09 6d 5f 70 53 74 6f 72 65 4f 62 6a 2d ....m_pStoreObj-
0120: 3e 46 58 5f 53 74 72 69 6e 67 28 32 2c 20 22 20 >FX_String(2, "
0130: 20 20 30 22 2c 20 34 2c 20 31 29 3b 0d 0a 09 7d 0", 4, 1);...}
0140: 0d 0a 09 44 57 4f 52 44 2a 20 70 46 69 65 6c 64 ...DWORD* pField
0150: 49 44 3b 0d 0a 09 63 6f 6e 73 74 20 63 68 61 72 ID;...const char
0160: 2a 20 70 4f 62 6a 49 44 3b 0d 0a 7d 3b 0d 0a 0d * pObjID;..};...
0170: 0a 0d 0a 76 6f 69 64 20 4c 6f 6e 67 53 74 72 52 ...void LongStrR
0180: 65 61 64 65 72 3a 3a 52 65 61 64 53 74 72 28 4c eader::ReadStr(L
0190: 50 43 53 54 52 20 70 52 65 63 6f 72 64 42 75 66 PCSTR pRecordBuf
01a0: 65 72 2c 20 44 57 4f 52 44 20 6d 64 43 68 61 72 er, DWORD mdChar
01b0: 49 44 2c 20 43 53 74 72 69 6e 67 26 20 76 61 6c ID, CString& val
01c0: 29 0d 0a 7b 0d 0a 09 6b 65 79 20 6b 28 73 74 6f )..{...key k(sto
01d0: 72 65 2e 70 49 6e 64 65 78 29 3b 0d 0a 09 6b 2e re.pIndex);...k.
01e0: 70 46 69 65 6c 64 49 44 20 3d 20 26 6d 64 43 68 pFieldID = &mdCh
01f0: 61 72 49 44 3b 0d 0a 09 6b 2e 70 4f 62 6a 49 44 arID;...k.pObjID
0200: 20 3d 20 70 52 65 63 6f 72 64 42 75 66 65 72 3b = pRecordBufer;
0210: 0d 0a 09 69 66 28 73 74 6f 72 65 2e 47 6f 74 6f ...if(store.Goto
0220: 28 26 6b 2c 20 63 63 45 2c 20 30 29 29 0d 0a 09 (&k, ccE, 0))...
0230: 7b 0d 0a 09 09 4c 50 43 53 54 52 20 70 74 72 20 {....LPCSTR ptr
0240: 3d 20 70 52 65 61 64 42 75 66 20 2b 20 31 37 3b = pReadBuf + 17;
0250: 0d 0a 09 09 44 57 4f 52 44 20 73 69 7a 65 20 3d ....DWORD size =
0260: 20 30 3b 0d 0a 09 09 66 6f 72 28 3b 3b 29 0d 0a 0;....for(;;)..
0270: 09 09 7b 0d 0a 09 09 09 44 57 4f 52 44 20 73 20 ..{.....DWORD s
0280: 3d 20 73 74 61 74 69 63 5f 63 61 73 74 3c 44 57 = static_cast<DW
0290: 4f 52 44 3e 28 73 74 61 74 69 63 5f 63 61 73 74 ORD>(static_cast
02a0: 3c 42 59 54 45 3e 28 2a 70 74 72 2b 2b 29 29 3b <BYTE>(*ptr++));
02b0: 0d 0a 09 09 09 69 66 28 73 20 3e 3d 20 27 30 27 .....if(s >= '0'
02c0: 20 26 26 20 73 20 3c 3d 20 27 39 27 29 0d 0a 09 && s <= '9')...
02d0: 09 09 09 73 69 7a 65 20 3d 20 73 69 7a 65 20 2a ...size = size *
02e0: 20 31 36 20 2b 20 73 20 2d 20 27 30 27 3b 0d 0a 16 + s - '0';..
02f0: 09 09 09 65 6c 73 65 20 69 66 28 73 20 21 3d 20 ...else if(s !=
0300: 27 20 27 29 0d 0a 09 09 09 09 73 69 7a 65 20 3d ' ')......size =
0310: 20 73 69 7a 65 20 2a 20 31 36 20 2b 20 73 20 2d size * 16 + s -
0320: 27 61 27 20 2b 20 31 30 3b 0d 0a 09 09 09 65 6c 'a' + 10;.....el
0330: 73 65 0d 0a 09 09 09 09 62 72 65 61 6b 3b 0d 0a se......break;..
0340: 09 09 7d 0d 0a 09 09 4c 50 53 54 52 20 70 57 72 ..}....LPSTR pWr
0350: 69 74 65 20 3d 20 76 61 6c 2e 47 65 74 42 75 66 ite = val.GetBuf
0360: 66 65 72 53 65 74 4c 65 6e 67 74 68 28 73 69 7a ferSetLength(siz
0370: 65 29 3b 0d 0a 09 09 69 66 28 73 69 7a 65 20 3c e);....if(size <
0380: 3d 20 37 31 29 0d 0a 09 09 09 6d 65 6d 63 70 79 = 71).....memcpy
0390: 28 70 57 72 69 74 65 2c 20 70 52 65 61 64 42 75 (pWrite, pReadBu
03a0: 66 20 2b 20 31 37 20 2b 20 39 2c 20 73 69 7a 65 f + 17 + 9, size
03b0: 29 3b 0d 0a 09 09 65 6c 73 65 0d 0a 09 09 7b 0d );....else....{.
03c0: 0a 09 09 09 6d 65 6d 63 70 79 28 70 57 72 69 74 ....memcpy(pWrit
03d0: 65 2c 20 70 52 65 61 64 42 75 66 20 2b 20 31 37 e, pReadBuf + 17
03e0: 20 2b 20 39 2c 20 37 31 29 3b 0d 0a 09 09 09 70 + 9, 71);.....p
03f0: 57 72 69 74 65 20 2b 3d 20 37 31 3b 0d 0a 09 09 Write += 71;....
0400: 09 73 69 7a 65 20 2d 3d 20 37 31 3b 0d 0a 09 09 .size -= 71;....
0410: 09 70 74 72 20 3d 20 70 52 65 61 64 42 75 66 20 .ptr = pReadBuf
0420: 2b 20 31 37 3b 0d 0a 09 09 09 64 6f 0d 0a 09 09 + 17;.....do....
0430: 09 7b 0d 0a 09 09 09 09 73 74 6f 72 65 2e 47 6f .{......store.Go
0440: 74 6f 28 6e 61 76 4e 65 78 74 2c 20 30 29 3b 0d to(navNext, 0);.
0450: 0a 09 09 09 09 69 6e 74 20 63 6f 70 79 20 3d 20 .....int copy =
0460: 73 69 7a 65 20 3c 20 38 30 20 3f 20 73 69 7a 65 size < 80 ? size
0470: 20 3a 20 38 30 3b 0d 0a 09 09 09 09 6d 65 6d 63 : 80;......memc
0480: 70 79 28 70 57 72 69 74 65 2c 20 70 74 72 2c 20 py(pWrite, ptr,
0490: 63 6f 70 79 29 3b 0d 0a 09 09 09 09 70 57 72 69 copy);......pWri
04a0: 74 65 20 2b 3d 20 63 6f 70 79 3b 0d 0a 09 09 09 te += copy;.....
04b0: 09 73 69 7a 65 20 2d 3d 20 63 6f 70 79 3b 0d 0a .size -= copy;..
04c0: 09 09 09 7d 77 68 69 6c 65 28 73 69 7a 65 29 3b ...}while(size);
04d0: 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a 09 65 6c 73 65 ....}...}...else
04e0: 0d 0a 09 09 76 61 6c 2e 45 6d 70 74 79 28 29 3b ....val.Empty();
04f0: 0d 0a 7d 0d 0a ..}..