我有一个查询,根据条件产生一些文本.但是不要担心所有条件,我只是在'md.OtherMedication ='OTHERMEDICATION'及其评论显示时才会遇到问题.
因此,如果评论有价值,<shubham>
那么它就会返回
<shubham>
Run Code Online (Sandbox Code Playgroud)
这不是预期的结果.以下是我正在使用的查询.
Select '' + CASE WHEN md.OtherMedication = 'OTHERMEDICATION' THEN md.Comment ELSE '' END
FROM Medication md
WHERE md.HraDiagnosisId = 94121 FOR XML PATH(N'')
Run Code Online (Sandbox Code Playgroud)
我期待<shubham>结果.
我在我的应用程序中创建了一个 sqlquery 方法,它基本上获取 SQL 命令并以 json 形式返回结果,问题是,当填充"和其他有问题的字符时,这会创建无效的 json 。
我尝试QObject先创建一个,然后将其序列化为 JSON,但我无法实现。
即使数据包含符号,如何使该方法生成有效的 json "?
QString Api::SQLQuery(const QString & sqlquery)
{
QSqlQuery query;
bool firstline = true;
query.setForwardOnly(true);
if(query.exec(sqlquery))
{
QString answer = "[";
while(query.next())
{
if(firstline){firstline = false;}else {answer += ",";}
answer += "{";
for(int x=0; x < query.record().count(); ++x)
{
if(x != 0){answer += ",";}
answer += "\""+query.record().fieldName(x) +"\":\""+ query.value(x).toString()+"\"";
}
answer += "}";
}
answer += "]";
return answer;
}
else
{
return …Run Code Online (Sandbox Code Playgroud) 我正在尝试获取QSqlQuery的行数,数据库驱动程序是qsqlite
bool Database::runSQL(QSqlQueryModel *model, const QString & q)
{
Q_ASSERT (model);
model->setQuery(QSqlQuery(q, my_db));
rowCount = model->query().size();
return my_db.lastError().isValid();
}
Run Code Online (Sandbox Code Playgroud)
这里的查询是一个选择查询,但我仍然得到-1;
如果我使用model->rowCount()我只获得显示的那些,例如256,但select count(*)返回120k结果.
这有什么不对?
在SQL查询中,例如,如何从行号10到50中选择特定数量的行.
SELECT top 15000 [ID]....
Run Code Online (Sandbox Code Playgroud)
将获得前15000行,但如果我想获得下一个15000,我该怎么办?
我有一个查询,它只是根据某些条件获取表的计数,例如:
QSqlQuery query("SELECT COUNT(*) FROM some_table WHERE some_value = :something");
query.bindValue(":something", "something");
Run Code Online (Sandbox Code Playgroud)
我的问题是我如何得到这个结果,显然这是你会使用的地方
query.value(int);
query.value(QString);
Run Code Online (Sandbox Code Playgroud)
但是文档说不应该使用 int index one,因为我们不知道索引是什么,我不能使用字符串 one,因为没有文件可以定义为我想要的结果。所以假设我说我是正确的,我怎么能从这个查询中将计数整数值放入一个 int 变量中
干杯
我已阅读Qt文档,无法从语言本身找到直接从查询结果中获取行数和列数的方法.我能想到的唯一方法就是SELECT COUNT(*) FROM table_name在mysql查询中使用它.
像另一个连接器(PHP,python,C++等),据我所知,没有直接的方法来获取这些值.也许我想念一些东西.那么,有没有可能的方法呢?也许是这样的:
int rows = db_connection->get_row_counts ();
int columns = db_connection->get_column_counts ();
Run Code Online (Sandbox Code Playgroud) 我正在 PyQt 中创建一个应用程序,我想在其中创建一个列表,列表项是 SQL 查询的结果。我正在尝试通过以下代码执行此操作:
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtSql import *
def main():
app = QApplication(sys.argv)
win=QWidget()
layout=QHBoxLayout()
db = QSqlDatabase.addDatabase("QODBC")
win.setWindowTitle("Connect to MSSQL Database Example")
db.setHostName('LAPTOP-B79DRPA3')
db.setDatabaseName('local')
db.open()
if (db.open()==False):
QMessageBox.critical(None, "Database Error",
db.lastError().text())
query = QSqlQuery ()
query.exec_ ("select lydelse, bransch from [Sarah].[dbo].fraga")
listWidget = QListWidget()
index=0
while (query.next()):
listWidget.addItem(str(query.value(index)))
index = index+1
listWidget.setSelectionMode(QAbstractItemView.ExtendedSelection)
layout.addWidget(listWidget)
win.setLayout(layout)
win.show()
return app.exec_()
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
但是这里发生的事情是输出是一个包含来自不同列的项目的列表。我想要的是我应该能够选择一列并将所有行项目作为 list-items 添加到列表中:
index=0
while (query.next()): …Run Code Online (Sandbox Code Playgroud) 当我点击列标题时,我需要在表格中对列进行排序.但现在我不能,那是我的桌子:

如果单击标题,则无法执行操作.
这是我的c ++ QT代码:
void showTable()
{
connOpen();
QSqlQueryModel * myModel=new QSqlQueryModel();
QSqlQuery select;
if (!select.exec("select * from tab")) {
QMessageBox::critical(this, tr("Error"), select.lastError().text());
}
else {
myModel->setQuery(select);
ui->tableView->setModel(myModel);
}
connClose();
}
Run Code Online (Sandbox Code Playgroud)
我该怎么办?
我运行了多个查询,但在保存之前,qpad崩溃了.但是q-port,运行这些查询(在我的Windows机器上)仍然是打开的.我可以分别通过\v和恢复变量和函数\f.
有没有办法恢复q statements我运行的所有使用qpad?我忘了维护一个日志文件,因此我试图找到一种方法来恢复查询使用q-port.
谢谢
我有一个要求,即金额值应四舍五入到最接近的 5 美分到 2 个小数位。
Example:
255.263745 to 255.25 -- 26 taken to 25
57.2115 to 57.20 -- 21 taken to 20
100.75586 to 100.75
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法,但无法获得所需的输出。
select (RIGHT('00000000'+LEFT( CAST(CAST( ISNULL(198.85,0)*ISNULL(128.370,0) AS DECIMAL( 15,0)) AS VARCHAR( 15 )), 8 ), 8 ))
select CEILING(((ISNULL(198.85,0) * (ISNULL(128.370,0)/100)))/.05) *.05
Run Code Online (Sandbox Code Playgroud)
工作样本:
SELECT REPLACE(FORMAT(CAST(ROUND(((ISNULL(198.85,0) * (ISNULL(128.370,0)/100)/05)),2)*05 AS DECIMAL(10,2)),'000000.00'),'.','') AS [Actual Amount]
Run Code Online (Sandbox Code Playgroud)
输出:00025525