powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Помогите с запросом
30 сообщений из 30, показаны все 2 страниц
Помогите с запросом
    #36630685
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
strobrez = Left(CommonDialog1.FileTitle,  8 )
MsgBox (strobrez)
Adodc2.ConnectionString = "DRIVER={Microsoft dBase Driver (*.dbf)};DBQ= C:\obmen\archive ;DefaultDir =C:\obmen\archive"
Adodc2.CommandType = adCmdText
Adodc2.RecordSource = "SELECT " + strobrez + ".KOD," + strobrez + ".NAME ,zayav.NAME FROM " + strobrez + _
"INNER JOIN zayav ON " + strobrez + ".KOD=zayav.KOD"
Set TDataLite2.DataSource = Adodc2
Adodc2.Refresh
TDataLite2.Refresh


Задача состоит в том чтобы вывести схожие позиции

Выдает ошибку
ошибка синтаксиса в предложении FROM
...
Рейтинг: 0 / 0
Помогите с запросом
    #36630693
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05adm,

Пробела нет между именем таблицы и INNER
...
Рейтинг: 0 / 0
Помогите с запросом
    #36630699
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используйте алиасы для таблиц, меньше будете таких ошибок допускать:

Код: plaintext
1.
Adodc2.RecordSource = "SELECT STB.KOD, STB.NAME, zayav.NAME FROM " + strobrez + _
" AS STB INNER JOIN zayav ON STB.KOD=zayav.KOD"
...
Рейтинг: 0 / 0
Помогите с запросом
    #36630726
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Спасибо Большое )))

не подскажете как обнулить схожие позиции в двух таблицах и последующей записью их в таблицу zayav в adodc1
...
Рейтинг: 0 / 0
Помогите с запросом
    #36630736
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admне подскажете как обнулить схожие позиции в двух таблицах и последующей записью их в таблицу zayav в adodc1

Б-р-р-р.
Каша какая-то.

1) Что такое "обнулить позицию"?
2) Что значит "записать в таблицу zayav", что именно?
3) Что значит zayav в adodc1? Таблица, надо полагать, в базе находится, причем тут adodc1?
...
Рейтинг: 0 / 0
Помогите с запросом
    #36630753
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

это два dbf файла подключены через ado ,файл zayav.dbf находится в adodc1,
а в adodc2 как раз результат запроса в котором вы мне помогли,
так вот хотелось бы в схожих значениях в поле KOD в adodc1 и adodc2 в поле ZAKAZ поставить 0,
надеюсь сейчас понятно объяснил
...
Рейтинг: 0 / 0
Помогите с запросом
    #36630761
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы перемешали теплое с мягким.
Сколько у вас баз?
...
Рейтинг: 0 / 0
Помогите с запросом
    #36630779
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
формируется dbf файл в 1с с остатками
далее открываю в viusal basic через ado (zayav.dbf)
при отправке заказа (менеджеру)он добавляется в папку архив
, так вот хотелось чтобы при следующем формировании заказа
схожие позиции(в файле zayav.dbf и тем что открываю через CommonDialog с папки архив) в поле ZAKAZ(zayav.dbf) можно было автоматом проставить 0
...
Рейтинг: 0 / 0
Помогите с запросом
    #36630785
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть базы две...

К сожалению, с dBase не работал, не знаю синтаксиса, как из одной базы сделать запрос к другой базе, объединив INNER JOIN-ом таблицы из разных баз. Скорее всего можно, но лучше об этом спросить на форуме dBase-ников.

А если принципиально делать через ADO на клиенте, то "объединять" базы придется вручную с помощью цикла имитируя JOIN для двух коннектов.

ADODC вам, кстати, для этого не нужен.
...
Рейтинг: 0 / 0
Помогите с запросом
    #36630793
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
через ADO пробовал так но понятно из кода что результат будет не всегда верным

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
ad2 = Me.Adodc2.Recordset.RecordCount
For B =  0  To ad2
If Me.Adodc1.Recordset.EOF = False Then
If Me.Adodc2.Recordset.EOF = False Then
namefilt1 = Me.Adodc1.Recordset("KOD").Value
namefilt2 = Me.Adodc2.Recordset("KOD").Value
If namefilt1 = namefilt2 Then
Me.Adodc1.Recordset("ZAKAZ").Value =  0 
End If
Me.Adodc1.Recordset.MoveNext
Me.Adodc2.Recordset.MoveNext
 End If
 End If
 Next B
Adodc1.Refresh
TDataLite1.Refresh
Adodc2.Refresh
TDataLite2.Refresh
...
Рейтинг: 0 / 0
Помогите с запросом
    #36630797
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кто вас учил форматировать код... >:-o ничего ж непонятно

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
ad2 = Me.Adodc2.Recordset.RecordCount
For B =  0  To ad2
  If Me.Adodc1.Recordset.EOF = False Then
    If Me.Adodc2.Recordset.EOF = False Then
      namefilt1 = Me.Adodc1.Recordset("KOD").Value
      namefilt2 = Me.Adodc2.Recordset("KOD").Value
      If namefilt1 = namefilt2 Then
        Me.Adodc1.Recordset("ZAKAZ").Value =  0 
      End If
      Me.Adodc1.Recordset.MoveNext
      Me.Adodc2.Recordset.MoveNext
    End If
  End If
Next B
Adodc1.Refresh
TDataLite1.Refresh
Adodc2.Refresh
TDataLite2.Refresh
...
Рейтинг: 0 / 0
Помогите с запросом
    #36630799
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему MoveNext находятся на одном уровне, оба во внутреннем цикле?
...
Рейтинг: 0 / 0
Помогите с запросом
    #36630802
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

извините)))
...
Рейтинг: 0 / 0
Помогите с запросом
    #36630803
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему MoveNext находятся на одном уровне, оба во внутреннем цикле?

Не, другой вопрос. У вас всегда одинаковое количество записей в обоих рекордсетах?
...
Рейтинг: 0 / 0
Помогите с запросом
    #36630804
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

а как надо было?
...
Рейтинг: 0 / 0
Помогите с запросом
    #36630805
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
нет разное , потому то и не получается с этим кодом правильное значение
...
Рейтинг: 0 / 0
Помогите с запросом
    #36630808
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admShocker.Pro,
нет разное , потому то и не получается с этим кодом правильное значение

Ну, грубо говоря, есть два алгоритма, быстрый и простой. Вам какой?
...
Рейтинг: 0 / 0
Помогите с запросом
    #36630814
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
любой рабочий)))
movenext во втором рекордсете надо было после цикла по всем строкам в первом пускать?
...
Рейтинг: 0 / 0
Помогите с запросом
    #36630816
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admmovenext во втором рекордсете надо было после цикла по всем строкам в первом пускать?
Забудьте, это я глупость сморозил, ибо не ожидал увидеть..... эмммм.... такой странный алгоритм.

aduka05admлюбой рабочий)))
Устраиваете цикл по первому рекордсету. По каждой его строке во втором рекордсете ищете методом .Find нужную запись. Найдено - ставить нолик. Не забывайте делать .Update после изменения записи.
...
Рейтинг: 0 / 0
Помогите с запросом
    #36630822
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
спасибо вам , не ожидал повстречать здесь такого замечательного человека)
...
Рейтинг: 0 / 0
Помогите с запросом
    #36630826
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admне ожидал повстречать здесь такого замечательного человека)

Интересно, а где вы ожидали меня повстречать?
...
Рейтинг: 0 / 0
Помогите с запросом
    #36630831
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
вот именно нигде))
...
Рейтинг: 0 / 0
Помогите с запросом
    #36630834
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Код: plaintext
1.
2.
3.
namefilt1 = Me.Adodc1.Recordset("KOD").Value
namefilt2 = Me.Adodc2.Recordset("KOD").Value
Me.Adodc2.Recordset.Find ("KOD =" + namefilt1)
ошибку выдает так, неправильно написал?
...
Рейтинг: 0 / 0
Помогите с запросом
    #36630836
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admShocker.Pro,
Код: plaintext
1.
2.
3.
namefilt1 = Me.Adodc1.Recordset("KOD").Value
namefilt2 = Me.Adodc2.Recordset("KOD").Value
Me.Adodc2.Recordset.Find ("KOD =" + namefilt1)
ошибку выдает так, неправильно написал?
без скобок надо оказывается
...
Рейтинг: 0 / 0
Помогите с запросом
    #36630838
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admShocker.Pro,
вот именно нигде))
Оптимистичней надо быть

aduka05admошибку выдает так, неправильно написал?
Наверное неправильно.
Текст ошибки я угадать не смог.

И не забывайте, что искать надо с самого начала, а не с текущей позиции
...
Рейтинг: 0 / 0
Помогите с запросом
    #36630843
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
об этом не подумал))спасибо
...
Рейтинг: 0 / 0
Помогите с запросом
    #36630854
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Код: plaintext
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.
ad1 = Me.Adodc1.Recordset.RecordCount
ad2 = Me.Adodc2.Recordset.RecordCount

For i =  0  To ad1

 Me.Adodc2.Recordset.MoveFirst
  If Me.Adodc1.Recordset.EOF = False Then

   namefilt1 = Me.Adodc1.Recordset("KOD").Value
   namefilt1name = Me.Adodc1.Recordset("NAME").Value
   namefilt2 = Me.Adodc2.Recordset("KOD").Value
    Me.Adodc2.Recordset.Find "KOD =" + namefilt1
      If Adodc2.Recordset.EOF Then
        MsgBox "НЕТ СХОЖИХ"
       Else
         List1.AddItem (namefilt1name)
          Me.Adodc1.Recordset("ZAKAZ").Value =  0 
        
    End If
 End If

Me.Adodc1.Recordset.MoveNext

Next i
Adodc1.Refresh
TDataLite1.Refresh
Adodc2.Refresh
TDataLite2.Refresh

ВЗГЛЯНИ ПОЖАЛУЙСТА , ТАК ВЕРНО?
...
Рейтинг: 0 / 0
Помогите с запросом
    #36630855
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
код работает проверял
...
Рейтинг: 0 / 0
Помогите с запросом
    #36630871
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
ad2 = Me.Adodc2.Recordset.RecordCount
не нужно

Код: plaintext
If Me.Adodc1.Recordset.EOF = False Then
Как-то по-индусски... лучше так привыкать:
Код: plaintext
If Not Me.Adodc1.Recordset.EOF Then
оно и понятнее читается

Код: plaintext
namefilt2 = Me.Adodc2.Recordset("KOD").Value
не нужно

Код: plaintext
Me.Adodc2.Recordset.MoveFirst
не обязательно, в общем-то, так как у метода Find есть специальная опция поиска сначала.

Код: plaintext
MsgBox "НЕТ СХОЖИХ"
сообщение будет выдано столько раз, сколько нет схожих, при этом все время одинаковое... может указать, что конкретно не найдено?

Код: plaintext
Me.Adodc1.Recordset("ZAKAZ").Value =  0 
по идее, без последующего Update работать не должно.


Ну и форматирование.... размещайте начало и конец (условия, цикла, селекта и т.п.) на одном уровне, команды друг под другом, вложенные команды с одинаковым отступом. Иначе, когда напишете кучу кода - сами в нем разбираться перестанете, не говоря уж о других, вот уже сейчас фиг поймешь, где заканчивается IF

Код: plaintext
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.
ad1 = Me.Adodc1.Recordset.RecordCount
ad2 = Me.Adodc2.Recordset.RecordCount

For i =  0  To ad1

  Me.Adodc2.Recordset.MoveFirst
  If Me.Adodc1.Recordset.EOF = False Then

    namefilt1 = Me.Adodc1.Recordset("KOD").Value
    namefilt1name = Me.Adodc1.Recordset("NAME").Value
    namefilt2 = Me.Adodc2.Recordset("KOD").Value
    Me.Adodc2.Recordset.Find "KOD =" + namefilt1
    If Adodc2.Recordset.EOF Then
      MsgBox "НЕТ СХОЖИХ"
    Else
      List1.AddItem (namefilt1name)
      Me.Adodc1.Recordset("ZAKAZ").Value =  0 
    End If
  End If

  Me.Adodc1.Recordset.MoveNext

Next i
Adodc1.Refresh
TDataLite1.Refresh
Adodc2.Refresh
TDataLite2.Refresh
...
Рейтинг: 0 / 0
Помогите с запросом
    #36630882
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
очень полезно , благодарю, без update работает кстати
...
Рейтинг: 0 / 0
30 сообщений из 30, показаны все 2 страниц
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Помогите с запросом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]