2015-05-12 6 views
-1

Я уверен, что есть действительно простое решение по этому вопросу, но я пробовал все, что знаю без успеха.Использование TOP в простой строке SQL (VB6)

Я пытаюсь изменить эту полностью рабочую строку SQL, чтобы получить только результаты Топ-25, а не все результаты. Пробелы исправлены на этом посту. (Я использовал TOP 25 и т.д. с базами данных/Access Jet в течение многих лет без каких-либо проблем)

"SELECT * FROM " & "data.CSV" & " ORDER BY " & "Elapsed" & " DESC "* 

Для Top 25 SQL синтаксиса Я тестируемой:

1."SELECT TOP 25 FROM " & "data.CSV" & " ORDER BY " & "Elapsed" & " DESC " 
2."SELECT TOP 25 * FROM " & "data.CSV" & "ORDER BY " & "ELAPSED" & " DESC " 
3."SELECT TOP 25" & " ORDER BY " & "ELAPSED" & " DESC " & FROM" & " data.CSV" 

Ни в одном из этих трех продуктов любые результаты из файла данных линейных тестов 45 строк. Нет ошибок, все компилируются.

Редактировать: Исправлены пробелы рабочей строки. Фактический код используется правильно. Исправленная недостающая строка двойной кавычки 2.

Любые советы, оцененные.

Редактировать: Код добавлен.

Private Sub Command4_Click() '*** Print direct to report *** 
Dim Cn1 As ADODB.Connection 
Dim rs As ADODB.Recordset 
Dim fld As ADODB.Field 
Dim strData, iSQLStr As String 
Dim sData() As String 
Dim c, i, s As Integer 

On Error Resume Next 

    Set Cn1 = New ADODB.Connection 
    Cn1.ConnectionString = _ 
    "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _ 
    "DefaultDir=" & "C:\" 
    Cn1.Open 

Set rs = New ADODB.Recordset 
rs.Fields.Append "Room", adVarChar, 2 
rs.Fields.Append "Procedure", adVarChar, 2 
rs.Fields.Append "Group", adVarChar, 12 
rs.Fields.Append "Label", adVarChar, 12 
rs.Fields.Append "Time_In", adVarChar, 22 
rs.Fields.Append "Time_Out", adVarChar, 22 
rs.Fields.Append "Elapsed", adVarChar, 8 
rs.Open 

'iSQLStr = "Select TOP 25" & " ORDER BY " & "Elapsed" & " DESC " & "FROM" & " data.csv" 
'iSQLStr = "Select TOP 25 * FROM" & " data.csv" & " ORDER BY " & "Elapsed" & " DESC " 
iSQLStr = "Select * FROM " & "data.csv" & " ORDER BY " & "Elapsed" & " DESC " 
Set rs = Cn1.Execute(iSQLStr) 

Set DataReport1.DataSource = rs 
DataReport1.Show vbModal 
rs.Close 
End Sub 
+2

ваш первый будет ** NOT ** сбор. у вас нет пробелов между строками, поэтому вы создаете 'SELECT ... FROMdata.CSVORDER BYElapsed Desc', что является прямой синтаксической ошибкой. И вы пытаетесь выбрать из. CSV-файла, или находитесь в базе данных с именем 'data', с таблицей с именем' CSV'? –

+3

Ваш второй должен работать с дополнительными пространствами, указанными @MarcB. Кроме того, ему не хватает двойной кавычки конца ... '" SELECT TOP 25 * FROM "&" data.CSV "&" ORDER BY "&" ELAPSED "&" DESC "' – jradich1234

+1

Ваш второй оператор не выбирает любые строки, поэтому он не удастся. Ваш третий оператор не оставляет пробела между именем файла и 'ORDER BY', а' DESC' не заключен в двойные кавычки. У вашего 4-го оператора есть 'ORDER BY' перед предложением' FROM', которое не разрешено в любой СУБД. Это беспорядок. – JNevill

ответ

0
"SELECT TOP 25 * FROM " & "data.CSV" & "ORDER BY " & "ELAPSED" & DESC " 

ли один, который выглядит ближе всего к работе, за исключением, что не хватает некоторых пробелов.

На каком языке это? Я не знаю, что амперсанд и кавычки все значения, но если вы можете создать строку, как это должно работать:

SELECT TOP 25 * FROM data.CSV ORDER BY ELAPSED DESC 

После синтаксис, который вы используете, я думаю, что это имеет правильный интервал:

"SELECT TOP 25 * FROM " & "data.CSV " & "ORDER BY " & "ELAPSED " & DESC" 
-3

Просто добавьте опцию LIMIT в конце вашего запроса. Если он отсортирован или упорядочен так, как вам нужно, просто добавьте LIMIT 25 до конца и он вернет первые 25 строк.

SELECT * FROM" & "data.CSV" & "ORDER BY " & "Elapsed" & " DESC **LIMIT 25** 
+0

это не mysql, так как mysql не имеет «top» ... –

+1

'LIMIT' является специфичной для РСУБД. Он работает в Mysql, Oracle и Postgres. Например, он не работает в Sql Server, Jet/Ace/Access, Teradata. – JNevill

0

Я думаю, что вам не хватает столбца (ов), который вы хотите выбрать.

SELECT TOP number|percent column_name(s) 
FROM table_name; 
Смежные вопросы