2 / 2 / 1
Регистрация: 31.05.2014
Сообщений: 169

Поиск в базе по части строки Memo

24.07.2014, 12:52. Показов 4029. Ответов 63
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем такой вопрос. В поле мемо считывается файл такого типа:
Номер документа Дата Фамилия
10/15/2001 13.01.2001 Иванова
37/43/2013 01.03.2013 Петров
и такого:
Номер документа=10/15/2001 Дата=13.01.2001 Фамилия=Иванова
Номер документа=37/43/2013 Дата=01.03.2013 Фамилия=Петров
надо чтоб по номеру документа из мемо искал данные в таблице и выводил их в другой мемо, как это сделать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.07.2014, 12:52
Ответы с готовыми решениями:

Поиск индекса строки MEMO
Как узнать индекс строки memo, зная первое слово этой строки? Т.е. существует к примеру строка "asd 123". Я задаю в поиск asd и...

Поиск слова в файле и вывод строки в поле Memo
Помогите написать код для кнопки после нажатия она должна считать даные с компонента Edit, проверить даные в файле и вивести рядок с...

Поиск по базе по части слова в DataSet (tableadapter)
Добрый день. Вот как я делаю поиск: plangamybaBindingSource.Filter = string.Format(" Like'" + textBox1.Text + "%'"); ...

63
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
25.07.2014, 10:20
Студворк — интернет-сервис помощи студентам
Safer54rus, последний раз спрашиваю. Четко, полностью, наиболее объемисто, в одном сообщении, сформулируйте всю задачу целиком. Подумайте десять минут, не спешите.
1
2 / 2 / 1
Регистрация: 31.05.2014
Сообщений: 169
25.07.2014, 10:28  [ТС]
SatanaXIII, Выбираем файл в xls формате, пример описан ранее, выбираем сами, а не задаём путь в коде.
Данные из файла должны переноситься в DBGrid или StringGrid, далее по номеру документа производится поиск в базе данных (MS SQL) и в соседний Memo должна выводится информация:
Если данные найдены, то выводить информацию о документе из базы (""Номер документа" такой-то "Даты" загружен"), если же такого номера документа не было в базе, то выводить "Документ с таким-то номером отсутствует"
1
Модератор
 Аватар для D1973
9948 / 6483 / 2461
Регистрация: 21.01.2014
Сообщений: 27,468
Записей в блоге: 3
25.07.2014, 10:28

Не по теме:

Цитата Сообщение от SatanaXIII Посмотреть сообщение
Стойте, стойте, стойте. Что за хрень сейчас происходит?
Происходит то, что все мы тут пытаемся развить телепатические способности...


В общем выдаю СВОЕ понимание задачи:
1. У ТС-а есть база, где фигурируют номера каких-то документов
2. Время от времени ТС-у приходят файлы формата ТХТ или XLS, причем ТХТ могут приходить двух видов, как показано в первом посте.
3. Задача в том, чтобы проверить по базе, встречаются ли там (в базе) номера документов, поданные в файлах.

Я правльно угадал?
0
2 / 2 / 1
Регистрация: 31.05.2014
Сообщений: 169
25.07.2014, 10:30  [ТС]
D1973, лучше просто по xls, так как с txt дольше мучаться
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
25.07.2014, 10:43

Не по теме:

Хвала эскулапу!



Цитата Сообщение от Safer54rus Посмотреть сообщение
Данные из файла должны переноситься в DBGrid или StringGrid
А зачем? Зачем пользователю показывать грязное белье?

Не по теме:

Цитата Сообщение от D1973 Посмотреть сообщение
Происходит то, что все мы тут пытаемся развить телепатические способности...
Я уже теперь могу не вспоминать куда я положил очки, а просто прям из-за компа, просканировать соседние комнаты. Довольно удобно.

0
2 / 2 / 1
Регистрация: 31.05.2014
Сообщений: 169
25.07.2014, 10:48  [ТС]
SatanaXIII, ну сказали сделать так...там по мимо всего ещё куча работы, но я хочу для начала с этим разобраться
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
25.07.2014, 11:03
Гсевдокод:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
{
TStringList AllFileText = GetTextFromFileWithOle( OpenDialog->FileName ); // + Внутри определение исходного форматирования и возврат номера функции для парсинга. Или даже прям там же и парсить
 
while( AllFileText->Count-- )
  {
  String CurrNumber = GetNumber( AllFileText->Strings[i] );
  ADOQuery->SQL->Add( CurrNumber );
  if(ADOQuery1->IsEmpty())
    Memo->Lines->Add( "Document " + CurrNumber + " not found" );
  else
    Memo->Lines->Add( Document + ADOQuery1->FieldByName("Data")->Value + "loaded");
  }
}
1
2 / 2 / 1
Регистрация: 31.05.2014
Сообщений: 169
25.07.2014, 11:11  [ТС]
SatanaXIII, а можно комментарии к циклу?
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
25.07.2014, 11:38
Safer54rus, это код ненастоящий. Просто схематично отображена последовательность действий в духе C++.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{ // Где-то в теле какой-то функции
TStringList AllFileText // Создаем список, чтобы туда считать данные из файла
= GetTextFromFileWithOle( // Вызываем заранее нами же написанную функцию, которая получит имя файла, найдет его, откроет его как Ole-объект (непосредственно через Excel), определит какой тип форматирования в нем, прочтет из него данные соответствующим образом, и вернет наконец список прочтенных отформатированных как нам нужно данных.
OpenDialog->FileName ); // Имя файла выбрать посредством стандартного диалогового окна
 
while( AllFileText->Count-- ) // Цикл по всем строкам списка со всем текстом
  {
  String CurrNumber // Создаем переменную, где будем хранить найденный номер
   = GetNumber( // Получаем с помощью нашей самописной функции-парсера номер из текущей строки
  AllFileText->Strings[i] ); // Собственно текущая строка списка
  ADOQuery->SQL->Add( CurrNumber ); // Формируем запрос к базе данных, включая в него полученный номер. Исполняем запрос, все дела.
  if(ADOQuery1->IsEmpty()) // Если ничего не найдено
    Memo->Lines->Add( "Document " + CurrNumber + " not found" ); // тогда пишем, что не найдено
  else // Если найдено
    Memo->Lines->Add( Document + ADOQuery1->FieldByName("Data")->Value + "loaded"); // Пишем, что найдено
  }
}
1
2 / 2 / 1
Регистрация: 31.05.2014
Сообщений: 169
25.07.2014, 11:46  [ТС]
Цитата Сообщение от SatanaXIII Посмотреть сообщение
GetTextFromFileWithOle
вот с этим только не понял, это в смысле функция чтения xls файла?
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
25.07.2014, 12:01
Цитата Сообщение от Safer54rus Посмотреть сообщение
это в смысле функция чтения xls файла?
Да.
Что-то типа:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
TStringList GetTextFromFileWithOle( String FullPathAndNameXlsFile_ )
{
TStringList *sl = new TStringList(); // Лучше конечно по ссылке как параметр
 
if( FileExists( FullPathAndNameXlsFile_ ) )
  {
  Variant Excel;
  try
    {
    Excel = CreateOleObject( "Excel.Application" );
    Excel.OlePropertySet( WideString( "Visible" ), false );
    Variant Book = Excel.OlePropertyGet( WideString( "Workbooks" ) ).OlePropertyGet
        ( WideString( "Open" ), WideString( FullPathAndNameXlsFile_ ) );
    Variant Sheet = Book.OlePropertyGet( "Worksheets", 1 );
 
    // активация последней заполненной ячейки
    Excel.OlePropertyGet("Cells").OlePropertyGet( "SpecialCells",
        XlCellType::xlCellTypeLastCell).OleProcedure("Activate");
    // Получаем значение последней строки
    unsigned rows = Excel.OlePropertyGet("ActiveCell").OlePropertyGet("Row");
    // Получаем значение последней колонки
    unsigned cols = Excel.OlePropertyGet("ActiveCell").OlePropertyGet("Column");
 
    for ( unsigned i = 0; i < raws; ++i )
        {
        String tempRaw = ""; 
        for ( unsigned j = 0; j < cals; ++j )
            {
            tempRaw = tempRaw + Sheet.OlePropertyGet( WideString("Cells"), i, j ); // Для сельской местности
            }
        sl->Add( tempRaw );
        }
    }
  __finally
    {
    try
      {
      Excel.OleProcedure( WideString("Quit") );
      }
    catch(...)
      {
      ::MessageBox( NULL, L"Some error from Ole", L"Error", MB_OK );
      return false;
      }
    }
  }
else
    {
    ::MessageBox( NULL, L"File "".xls"" not found", L"Warning", MB_OK );
    return false;
    }
 
return sl;
}
1
2 / 2 / 1
Регистрация: 31.05.2014
Сообщений: 169
25.07.2014, 12:11  [ТС]
Цитата Сообщение от SatanaXIII Посмотреть сообщение
WideString( FullPathAndNameXlsFile_ )
тут можно прописать ?
C++
1
WideString(OpenDialog1->FileName)
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
25.07.2014, 12:14
Неа. Это ж дело происходит уже внутри функции, которая ничего об OpenDialog-е не знает. А через параметр все передастся как нужно.
0
2 / 2 / 1
Регистрация: 31.05.2014
Сообщений: 169
25.07.2014, 12:17  [ТС]
SatanaXIII, ну мне-то надо, чтоб мы выбирали файл...как тогда быть?
что-то я окончательно запутался...
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
25.07.2014, 12:21
Так вот здесь же все есть; оно автоматом подставиться при вызове:
C++
2
GetTextFromFileWithOle( OpenDialog->FileName );
1
2 / 2 / 1
Регистрация: 31.05.2014
Сообщений: 169
25.07.2014, 12:26  [ТС]
SatanaXIII, так, ладно, а куда пихать, собственно, эту саму функцию? и что кидать на форму?
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
25.07.2014, 12:32
Цитата Сообщение от Safer54rus Посмотреть сообщение
и что кидать на форму?
Ну что вы там хотели и кнопку.
Цитата Сообщение от Safer54rus Посмотреть сообщение
куда пихать, собственно, эту саму функцию?
В кнопку.
1
2 / 2 / 1
Регистрация: 31.05.2014
Сообщений: 169
25.07.2014, 12:35  [ТС]
SatanaXIII,
Цитата Сообщение от SatanaXIII Посмотреть сообщение
В кнопку.
а тогда предыдущую куда? создавать ещё одну кнопку?
[C++ Error] Main.cpp(36): E2090 Qualifier 'XlCellType' is not a class or namespace name
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
25.07.2014, 12:47
Цитата Сообщение от Safer54rus Посмотреть сообщение
а тогда предыдущую куда? создавать ещё одну кнопку?
Нет. Отдельно положить. Самому ручками, по аналогии с обработчиком кнопки.

P.S. Мне кажется скоро я вам начну советовать пойти почитать книжки.
1
2 / 2 / 1
Регистрация: 31.05.2014
Сообщений: 169
25.07.2014, 12:49  [ТС]
SatanaXIII, спасибо, кажется я понял...просто одновременно и работать и пытаться писать программу у меня не получается...надо делать что-то одно за раз
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.07.2014, 12:49

Поиск строки в Memo по фильтру
Здравствуйте, ну расскажу так, мне нужно 1) в memo1 найти строчку по фильтру 2) надо скопировать эту строчку 3) вставить в memo2

Поиск в Memo уникальной строки (Delphi)
Уважаемые программисты! В Memo есть строка, которая встречается один раз, все остальные строчки повторяются. Необходимо найти эту одну...

Поиск значений (строки) из Memo в таблице
В Таблице 3 записи, а в Memo - 5. Необходимо по кнопке показать сообщения (один за другим) с номерами которых нет. То есть;...

Поиск по части строки
Суть в чем. Есть контейнеры с данными. примерная разметка &lt;input type=&quot;text&quot;&gt; &lt;button...

Поиск строки в Memo или через типизированные файлы
В общем, ребята, суть такая: по заданию в программе мне необходимо предусмотреть возможность ввода информации (название, номер и тип...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Опции темы

Новые блоги и статьи
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru