Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Как при выборе записи в ComboBox, удалить ее с листа?

Как при выборе записи в ComboBox, удалить ее с листа?
Ответ: Вот есть небольшой пример, который у меня используется при поиске. Ввод значения поиска пишется в ComboBox, и потом его и запоминает в нем. Получается окно ввода с памятью.
Код пишется в метод Valid

*// Если ничего не введено, или пустое значение - ничего не происходит
IF EMPTY(This.Text) &&.OR. ALLTRIM(This.Text) = ALLTRIM(This.Value)
RETURN
ENDIF
WITH Thisform
NewPopup = .T. && Признак записи в ComboBox
*// Сканируем существующий список, если уже такое значение (разрешать нам добавлять в список или нет)
FOR nn = 1 TO This.ListCount
IF This.List(nn) = ALLT(This.Text)
*// если такое значение уже найдено в списке, то признак записи принимает .F.
NewPopup = .F.
ENDIF
ENDFOR
*// Если такого значения нет в списке то его добавляем
IF NewPopup = .T.
*// Ограничение количества записей в списке равное 20, если больше, то первая запись удаляется, а текущая добавляется
IF This.ListCount >= 20
This.RemoveItem(1) && удаляем первую запись
ENDIF
This.AddItem(This.Text) && добавляем новую запись к текущим
ENDIF

Получается тут есть и добавление записи и удаление. А порядковый номер записи, это его индекс.
Поиграйся с этой процедурой.
Вопрос: Выбор записи из списка в форме

Есть таблица с тремя полями. Эти поля заполняются через форму. Два поля заполняются через текстовое поле и одно флажком (да/нет). В форме есть список который отображает все записи из таблицы. Нужно сделать так чтобы при выборе записи из списка и нажатии на кнопку 2 (галочка) выбранная запись была выбрана в трех полях для редактирования. Заранее спасибо.

Добавлено через 53 секунды
Вложение 515248
Ответ:
Цитата Сообщение от Sinopsys330 Посмотреть сообщение
Отлично работает с числовыми значениями а вот при попытке применить это способ к текстовому полю ругается (3070).
Текстовые значения всегда должны записываться в кавычках или апострофах. Иначе система воспринимает их как имя не найденного ею объекта и выдает ошибку. Вот например если бы Вы искали город в выражении, где Список2 это Москва
Код Visual Basic
1
Me.Recordset.FindFirst "Город=" & Me.Список2
Распечатаем строку "Город=" & Me.Список2 и получим "Город=Москва". И система в шоке, она не знает, что это за объект Москва. Но если бы Москва была в апострофах, то все меняется и все рады
Код Visual Basic
1
Me.Recordset.FindFirst "Город='" & Me.Список2 & "'"
Распечатав этот код получим Город='Москва'. И система знает, что ей подсунули текст. А не неопознаный объект
Вопрос: При выборе по дате из 8 записей выбирается только одна

Access 2010. Простая таблица. Выбор происходит по дате.
Запрос выбирает корректно по всем датам, кроме 30.06.2015.
Что не так? Может кто-нибудь объяснить?
Ответ: Проблема в том, что во всех датах кроме одной за это число есть еще и время. Соответственно, условие не выполнялось. Но может быть применено в такой форме
SQL
1
2
3
SELECT tbl_FeedStore.IdRec, tbl_FeedStore.QuontBalance, tbl_FeedStore.DateRec, tbl_FeedStore.IdFeed
FROM tbl_FeedStore
WHERE datevalue(tbl_FeedStore.DateRec)=#06/30/2015#
Вопрос: Выбор записей, где дата меньше, чем в списке

Здравствуйте!

Есть таблица

name | num | ndate

Есть список дат (2016-10-10 12:00, 2016-10-10 12:10, 2016-10-10 12:20 ...) около 50 дат

Можно ли как-то оптимальнее сделать выборку, в которой первым была бы сумма по NUM, где NDATE меньше первого элемента списка дат, вторым - сумма по NUM, где NDATE меньше второго элемента и т.д., пока не закончится список?
Ответ:
Здравствуйте!

Есть таблица

name | num | ndate

Есть список дат (2016-10-10 12:00, 2016-10-10 12:10, 2016-10-10 12:20 ...) около 50 дат

Можно ли как-то оптимальнее сделать выборку, в которой первым была бы сумма по NUM, где NDATE меньше первого элемента списка дат, вторым - сумма по NUM, где NDATE меньше второго элемента и т.д., пока не закончится список?
Вопрос: Запрос на диапазон дат

Объясните пожалуйста, как выполнить запрос выбора диапазона дат в phpmyadmin на примере таблицы orders?
Ответ: Спасибо,но я уже сам разобрался, и правильным будет вот такое решение запросом:

Выбор диапазона дат
SELECT * FROM bibl where `year`>='2010-02-05' AND `year`<='2015-02-05'
Вопрос: неправильная запись даты

Win(7,XP),VFP9,Excel2003
ячейка Excel имеет формат дата тип *14.03.2001
введено значение 13.03.2013
команда в VFP
SET DATE TO GERMAN
.SAVEAS("xxxxxx.csv",6)
просматриваешь файл записано 3/13/2013
Почему, и как найти по какому формату происходит запись в файл csv?
Ответ:
ВладимирМ
Применительно к FoxPro можно использовать экспорт/импорт через массив. Единственное ограничение - это ограничение на количество ячеек массива в FoxPro. Для версий младше VFP9 не должно быть больше 65 тысяч ячеек и все данные не должны занимать более 2ГБ. Также следует учитывать тот факт, что через массивы нельзя передать содержимое мемо-полей.
.
.
.

Пытаюсь таким способом экспортировать в Excel таблицу. Если нет полей типа Date все отлично, если есть -- ругается и не экспортирует. Пишет Unknown COM status code. Пробовал предварительно форматировать соответствующие колонки Excel'я как Дата, не помогло. Как быть?
Вопрос: Запрос по выбору макс. дат

Добрый день, всем!

Просьба подсказать в запросе:

Есть таблица книг (Journal_car)
id_j_car – ИД книги

и таблица выдачи книг (Car_out), в которой:
id_j_car – ИД книги
dt_out – дата выдачи книги
dt_return – дата возврата книги
id_car_out – ИД записи в таблице выдачи

(см. таблица_Car_out.JPG)

Надо выбрать все книги и показать максимальную дату выдачи если книга выдавалась (если нет – то пусто) и дату возврата, если книга возвращалась:
SELECT a.id_j_car,MAX(l.dt_out) as dt_out,l.dt_return FROM Journal_car a, Car_out l WHERE a.id_j_car=l.id_j_car GROUP BY a.id_j_car,l.dt_return ORDER BY a.id_j_car DESC


К сообщению приложен файл. Размер - 31Kb
Ответ: Спасибо Sybex, как и надо!
Вопрос: Выбор записей, где дата меньше, чем указано в списке

Здравствуйте!

Есть таблица

name | num | ndate

Есть список дат (2016-10-10 12:00, 2016-10-10 12:10, 2016-10-10 12:20 ...) около 50 дат

Можно ли как-то оптимальнее сделать выборку, в которой первым была бы сумма по NUM, где NDATE меньше первого элемента списка дат, вторым - сумма по NUM, где NDATE меньше второго элемента и т.д., пока не закончится список?
Ответ: Error202, не заметил... я не знаю как реализовать это одним запросом((
Вопрос: Выбор записей, где дата меньше, чем в списке

Здравствуйте!

Есть таблица

name | num | ndate

Есть список дат (2016-10-10 12:00, 2016-10-10 12:10, 2016-10-10 12:20 ...) около 50 дат

Можно ли как-то оптимальнее сделать выборку, в которой первым была бы сумма по NUM, где NDATE меньше первого элемента списка дат, вторым - сумма по NUM, где NDATE меньше второго элемента и т.д., пока не закончится список?
Ответ:
del

Это сообщение отредактировал(а) Zloxa - 10.11.2016, 18:01
Вопрос: Процедура, которая перемешает дни в датах регистрации

Здравствуйте! Что-то совсем не могу разобраться. есть таблица, из которой надо вытащить 500 записей об обществах, затем в созданную таблицу добавить колонку new_date. Создать таблицу для протоколирования работы процедуры. Написать процедуру, которая перемешает дни в датах(формат дд.мм.гг) регистрации(есть даты с null) в датах регистрации обществ и запишет полученный результат в new_date. Процедура должна фиксировать в таблицу логирования уникальный номер записи, дату и время выполнения операции замены, изначальную дату регистрации и ее новое значение.
Ответ:
Сообщение от minist
И как можно ее запустить, чтобы увидеть как работает?
То есть, просто запустить последние селекты и увидеть результат Вас не устраивает? Вы хотите видеть промежуточные этапы?
Если у Вас есть средство разработки с дебаггером, Вы можете им воспользоваться. Если нет, то можно вставить промежуточный серверный вывод и увидеть его на экране.
Сперва сделаем процедуру. Обратите внимание! Я вставил в нее пример серверного вывода в спул
Кликните здесь для просмотра всего текста
SQL
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
CREATE OR REPLACE PROCEDURE proc1  IS
    TYPE numtab IS TABLE OF NUMBER INDEX BY binary_integer;
    numt    number_table;
    TYPE dattab IS TABLE OF DATE INDEX BY binary_integer;
    datt    dattab;
    high    NUMBER;
    cc1     varchar2(10);
    cc2     varchar2(10);
    sss     varchar2(1000);
    datex   DATE;
    datim   DATE;
    v_rec   NUMBER;
BEGIN
    INSERT INTO mylog(comments)
    VALUES('Начало работы');
    datt.DELETE;
    numt := number_table();
    --
    SELECT COUNT(reg_date) INTO high        -- определяем количество записей, где reg_date is not null
    FROM mytest;
    --
    FOR i IN 1.. 5*high
    LOOP
        numt.extend;
        numt(numt.COUNT) := round(dbms_random.VALUE(1,high));        --  создаем массив случайных чисел
    END LOOP;
    INSERT INTO mylog(comments)
    VALUES('Массив случайных чисел создан');
    --
    FOR  vv IN  (SELECT reg_date, rownum nn
                 FROM mytest  
                 WHERE reg_date IS NOT NULL    )
    loop
        dbms_output.put_line('n='||vv.nn||'  date='||vv.reg_date);        -- пример серверного вывода в спул
        datt(vv.nn) := vv.reg_date; --  создаем массив для перемешивания
    END loop;                       
    --
    FOR i IN 1.. 5*high 
    loop
        datex := datt(MOD(i, high)+1);
        datt(MOD(i, high)+1) := datt(numt(i));
        dbms_output.put_line('i='||i||' n='||numt(i)||'  date_i='||datex||' date_n='||datt(numt(i)) );        -- второй пример серверного вывода в спул
        datt(numt(i)) := datex;                 --  перемешиваем даты в массиве
    END loop;                       
    INSERT INTO mylog(comments)
    VALUES('Перемешиваеие в массиве завершено');
    --
    FOR vv IN   (SELECT id_rec, reg_date, rowid id, rownum nn
                 FROM mytest  
                 WHERE reg_date IS NOT NULL    )
    LOOP
        v_rec := vv.id_rec;
        cc1 := to_char(last_day(vv.reg_date),'dd');
        cc2 := to_char(datt(vv.nn),'dd');
        datex:= vv.reg_date;
        IF to_number(cc2) > to_number(cc1) THEN 
            cc2 := cc1;
        END IF;
        datim := to_date(cc2||'.'||to_char(datex,'mm.yyyy'),'dd.mm.yyyy');
        UPDATE mytest 
           SET new_date = datim
        WHERE rowid= vv.id;
        INSERT INTO mylog(id_rec, old_date, new_date, comments)
        VALUES(vv.id_rec, datex, datim, 'Произведена штатная замена. Использована дата '||to_char(datt(vv.nn),'dd.mm.yyyy'));
    END loop;
    INSERT INTO mylog(comments)
    VALUES('Работа завершена');
    COMMIT;
exception
    WHEN others THEN
        sss := SQLERRM;
        INSERT INTO mylog(id_rec, old_date, new_date, comments)
        VALUES(v_rec, datex, datim, 'Err: '||sss);
        COMMIT;
        raise;
END;

Затем подаем команду на включение серверного вывода
SQL
1
SET SERVEROUTPUT ON SIZE UNLIMITED;
Если надо, серверный вывод можно отключить
SQL
1
SET SERVEROUTPUT OFF;
Наконец, запускаем процедуру
SQL
1
2
3
BEGIN
    proc1;
END;
Ну и можно посмотреть результат работы теми селектами, которые я приводил раньше

Добавлено через 4 минуты
Кстати, серверный вывод можно увидеть и при работе анонимного блока. Как раз лучше в анонимном блоке во время отладки смотреть, а потом в теле процедуры убирать (комментировать), чтобы не было лишней нагрузки на сервер