我有一个程序,该程序基本上打开一个.sql数据库文件,并将表名返回到字符串向量中。此字符串向量存储为tableNames
,并包含给定数据库文件中的表。由于某些我无法理解的原因,tableName
字符串中的sqlCreateTemp
参数未更新,但变量tableName
已更新。
void fileWrite()
{
string tableName;
string sqlCreateTemp = "CREATE TABLE tempLog AS SELECT * FROM " + tableName + "; UPDATE tempLog SET TIMESTAMP1=strftime('%s', datetime(timestamp1, 'localtime')) + strftime('%f', timestamp1) - strftime('%S', timestamp1);";
int rc = -1;
vector<string> tableNames = getTableNames();
for(int i = 0; i < tableNames.size(); i++)
{
cout << "TABLENAMES = " << tableNames[i] << endl;
tableName = tableNames[i] ;
cout << "tableName = " tableName << endl;
cout << "SQL = " << sqlCreateTemp << endl;
}
}
输出:
TABLENAMES = testTableABC
tableName = testTableABC
SQL = CREATE TABLE tempLog AS SELECT * FROM ; UPDATE tempLog SET TIMESTAMP1=strftime('%s', datetime(timestamp1, 'localtime')) + strftime('%f', timestamp1) - strftime('%S', timestamp1);
答案 0 :(得分:1)
您的计算机以一种逻辑方式一次执行一个语句。
string tableName;
这将创建一个新的std::string
。这是一个空字符串。
string sqlCreateTemp = "CREATE TABLE tempLog AS SELECT * FROM " + tableName + ...
这将创建另一个std::string
,其内容包括tableName
。正如我们刚刚观察到的,这是空的,因此sqlCreateTemp
的这部分内容是空的。
稍后执行的代码然后设置tableName
的新值:
tableName = tableNames[i] ;
很好,但这不会自动更改sqlCreateName
的内容。 C ++无法以这种方式工作。它的值是在此函数的开头设置的,以后再也不会更改。在设置时,tableName
是一个空字符串,就是这样。
如果每次sqlCreateTemp
更改时都想创建一个新值tableName
,则必须编写代码来完成。毕竟,“计算机编程的黄金法则”说:您的计算机总是准确无误地执行您告诉它要做的事情,而不是要执行的事情。如果您想让计算机更改sqlCreateTemp
的值,则每次tableName
的值更改时,都必须准确地告诉计算机执行此操作。
答案 1 :(得分:0)
您需要在更新let webNavView = WebNavToolbarView(viewLayoutMarginsGuide: view.layoutMarginsGuide)
let yPosition: CGFloat = webNavView.frame.height / 4
let xOffset: CGFloat = 8
let backButton = createButton(
image: .back,
xPosition: xOffset,
yPosition: yPosition,
selector: #selector(goBackPressed)
)
let forwardButton = createButton(
image: .forward,
xPosition: backButton.frame.maxX + xOffset,
yPosition: yPosition,
selector: #selector(goForwardPressed)
)
// FIXME: Doing this just to get the width for the createButtonMethod's xPosition parameter
let homeButton = createButton(
image: .home,
xPosition: webNavView.frame.maxX - forwardButton.frame.width - xOffset,
yPosition: yPosition,
selector: #selector(goHomeButtonPressed)
)
webNavView.translatesAutoresizingMaskIntoConstraints = false
webNavView.addSubview(backButton)
webNavView.addSubview(forwardButton)
webNavView.addSubview(homeButton)
self.view.addSubview(webNavView)
变量后更新sqlCreateTemp
,如下所示:
tableName
答案 2 :(得分:0)
以这种方式进行操作,以便您的tableName变量得到更新:
void fileWrite()
{
string tableName;
string sqlCreateTemp_part1 = "CREATE TABLE tempLog AS SELECT * FROM ";
string sqlCreateTemp_part2 = "; UPDATE tempLog SET TIMESTAMP1=strftime('%s', datetime(timestamp1, 'localtime')) + strftime('%f', timestamp1) - strftime('%S', timestamp1);";
string sqlCreateTemp;
int rc = -1;
vector<string> tableNames = getTableNames();
for(int i = 0; i < tableNames.size(); i++)
{
cout << "TABLENAMES = " << tableNames[i] << endl;
tableName = tableNames[i] ;
cout << "tableName = " tableName << endl;
sqlCreateTemp = sqlCreateTemp_part1 + tableName + sqlCreateTemp_part2;
cout << "SQL = " << sqlCreateTemp + << endl;
}
}